我有一个任务,其中我必须创建一个迷你 shell,它能够执行很多操作,包括作业控制。我设法使用 fork 和 execvp 创建新的工作。但我还想获取 execvp 运行的程序的退出代码。根据我从其他帖子中查找到的内容,我可以使用以下方法来做到这一点if(WIFEXITED(status))
.
但是,如果用户在 shell 中输入带有进程名称的“&”,我们还需要在后台运行该进程。因此,当子程序在后台完成时等待父进程等待是没有意义的。我可以设置任何中断来通知父进程子进程已结束吗?然后我可以使用if(WIFEXITED(status))
语句来获取退出代码。
Example
sleep 100 &
将在后台运行,同时我可以在前台同时执行其他 shell 命令。
如果您没有做任何特别的事情,家长会收到SIGCHLD
当孩子去世时。但要小心,多个子进程可以同时终止,并且您将收到一个信号。处理这个问题的正确方法是循环(在信号处理程序中):
while (waitpid(-1, NULL, WNOHANG) > 0)
/* Stuff. */
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)