Выход (0) не завершает программу - PullRequest
0 голосов
/ 20 декабря 2018

Я делаю оболочку и пытаюсь понять функцию ее форка (ниже показан только код с проблемой).

Однако после добавления 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//

Извиняюсь за грязное написание. Новый пользовательский интерфейс для написания вопросов сложен в использовании.

1 Ответ

0 голосов
/ 20 декабря 2018

Ваш родительский процесс застрял в цикле while(1).Добавьте break; строку после wait(NULL);.

...