我正在对 fork()、exec() 和相关的 UNIX 调用进行分配,我需要在其中显示(子)进程的僵尸状态。这是相关的代码:
pid = vfork(); //used vfork() for showing z state
if(pid>0)
{
(some sorting code)
execl("/bin/ps","/bin/ps","a",(char*)0);
}
我期望的是:
(child's output)
(parent's output)
(Output of the ps command where I then would be able to show a 'defunct' entry)
我得到的是:
(child's output)
(parent's output)
No ps command output. Instead I get: Signal 17 (CHLD) caught by ps (procps version 3.2.8)
但是,当sleep(int time)
在调用之前插入(以秒为单位的整数时间)时execl
,我得到了所需的输出并且没有报告任何信号错误。
这里发生了什么事?是否ps
成为(尚未成为僵尸的)孩子的新父母?为什么ps
命令不执行?这会sleep()
根据ps
需要执行什么操作?
我是 POSIX/Linux 编程的新手,因此SIGCHLD
我将不胜感激此信号与我的特定情况的任何相关性。谢谢!