Я пишу свою собственную оболочку 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», чтобы увидеть процессы, в которых нет сна.В чем может быть проблема?Заранее спасибо.