Я делаю оболочку и пытаюсь понять функцию ее форка (ниже показан только код с проблемой).
Однако после добавления fork();
моя оболочка не завершается с командой exit .Я знаю, что могу использовать kill(pid, SIGKILL)
для достижения этой цели, но я не хочу показывать статус выхода.Я думаю exit(0);
должно работать без необходимости kill(pid, SIGKILL)
.
Простое объяснение с кодом очень помогло бы.
Обновление: Я хочу принимать непрерывные команды до выхода.
#include <iostream>
#include <sys/wait.h>
#include <vector>
#include <string>
#include <chrono>
#include <algorithm>
#include <unistd.h>
using namespace std;
typedef struct cmds{
string cmd;
} cmds;
bool operator<(cmds &as1, cmds &bs1){
return as1.durr<bs1.durr;
}
int main() {
vector <cmds> lst;
cmds ant;
string cmd;
pid_t pid = fork() ;
while (1){
if(pid==0){
cout<<"$>";
getline(cin,cmd);
ant.cmd=cmd;
string comd;
for(int i=0;i<cmd.length();i++){
if(cmd[i]!=' ')
comd+=cmd[i];
}
if(comd=="exit"){
exit(0);
}
else{
char s[256]="";
for (int i=0; i<cmd.length(); i++)
s[i]=cmd[i];
}
lst.push_back(ant);
}
else
wait(NULL);
}
}
**Expected output** - //The shell should end without any cout or exit status//
**Actual output** - //The shell does not end and you can type anything and enter and continue - however no '$' is present and you cannot use any shell commands//
Извиняюсь за грязное написание. Новый пользовательский интерфейс для написания вопросов сложен в использовании.