c - 在后台运行的程序的退出状态

时间:2012-11-10 07:23:38

标签: c linux shell unix

我有一个任务,我必须创建一个迷你shell,它能够做很多事情,包括工作控制。我设法使用fork和execvp创建新的作业。但我也希望获得execvp运行的程序的退出代码。根据我从其他帖子中查找的内容,我可以使用if(WIFEXITED(status))

来完成此操作

但是如果用户输入'&'那么我们也需要在后台运行该过程。在shell中使用进程名称。因此,在子程序在后台完成时等待父进程等待是没有意义的。是否有任何可以设置的中断通知父进程子进程已经结束?然后我可以使用if(WIFEXITED(status))语句来获取退出代码。

实施例

sleep 100 &

将在后台运行,而我可以同时在前台执行其他shell命令。

1 个答案:

答案 0 :(得分:4)

如果您没有做任何特殊事情,父母会在孩子死亡时收到SIGCHLD。但是要小心,多个孩子可以同时终止,你会得到一个信号。处理这个问题的正确方法是循环(在信号处理程序中):

while (waitpid(-1, NULL, WNOHANG) > 0)
    /* Stuff. */