我正在编写自己的unix shell作为我的任务的一部分,我无法处理创建后台进程。我编写了一个信号处理函数,并在我的代码中实现了必要的(从我的观点 - 但显然不够好)部分,如下所示:
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);
}
当我进入“睡5&”时例如,然后输入“ps”以查看没有睡眠的进程。可能是什么问题?提前致谢。