Пишу свою собственную игрушечную оболочку, и натолкнулся на удар, пытаясь реализовать управление заданиями.
Я устанавливаю группу процессов дочернего процесса как в дочернем, так и в родительском процессах с помощью setpgid. Мой звонок ожидания:
pid = waitpid(-pid, &status, 0)
Однако waitpid возвращает -1, а perror говорит: «Нет дочернего процесса». Тем не менее, кажется, каждый раз ждать. Кроме того, вывод ps выглядит правильно, когда запускается из оболочки. Поскольку процесс ps parent является kbsh, как я и ожидал.
% ps -o pid,ppid,pgrp,session,tpgid,comm
Forking
In Parent: Setting process group to 20809 of process 20809 with setpgid
In Child Processes, pid of child process is 20809
in Child: Setting process group to 20809 of process 20809 with setpgid
Requesting that Process Group 20809 becomes the foreground process with tcsetpgrp
Waiting for job with process group 20809
PID PPID PGRP SESS TPGID COMMAND
12002 32573 12002 12002 20809 zsh
20808 12002 20808 12002 20809 kbsh
20809 20808 20809 12002 20809 ps
Wait Error: No child processes
Restoring Shell process group 20808 to forground
Кто-нибудь видит, что я делаю не так? может разместить больше кода, если это необходимо ...