создание фоновых процессов в моей собственной оболочке - PullRequest
2 голосов
/ 14 марта 2012

Я пишу свою собственную оболочку Unix как часть моего задания, и я не мог справиться с созданием фоновых процессов.Я написал функцию обработки сигналов и реализовал необходимые (с моей точки зрения, но, очевидно, недостаточно хорошие) части в своем коде следующим образом:

void handler(int sig)
{
    int pid;
    int status;
    pid = wait(NULL);
    printf("[%d]retval: %d \n", pid, WEXITSTATUS(status));
    fflush(stdout);
}

int main() { 
.....
....
struct sigaction sigchild; 
memset (&sigchild, 0, sizeof(sigchild)); 
sigchild.sa_handler = handler;
sigchild.sa_flags = SA_SIGINFO | SA_NOCLDWAIT;
...
...
if(isBackground)  //background process
{
    sigaction(SIGCHLD, &sigchild, 0);
}

Когда я, например, ввожу "sleep 5 &"а затем введите «ps», чтобы увидеть процессы, в которых нет сна.В чем может быть проблема?Заранее спасибо.

1 Ответ

0 голосов
/ 14 марта 2012

Ребенок - это фоновый процесс.Родитель - это процесс переднего плана. SIGCHLD - это сигнал, отправляемый родителю, когда ребенок заканчивается.Измените if (isbackground на if(!background)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...