[英]execl()-ing in parent process: SIGCHLD caught by ps
我正在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)
但是,在execl
调用之前插入sleep(int time)
(以秒为单位的某个整数时间)时,我得到了所需的输出,并且未报告任何信号错误。
这里发生了什么事? ps
是否会成为(仍为僵尸)孩子的新父母? 以及为什么ps
命令无法执行? sleep()
什么作用,使ps
根据需要执行?
我是POSIX / Linux编程的新手,因此希望此SIGCHLD
信号与我的特定情况有关。 谢谢!
我可能是错的,但是我认为这是怎么回事:
if
的一半,执行ps
。 ps
启动后,由于子级终止, SIGCHLD
被发送到父级进程(信号可能很慢且不可预测) SIGCHLD
会传递给父级,后者会忽略它,然后控制权传递给ps
。 标题
ps -ef失败,在Redhat 6.6上出现“ ps捕获的信号17(CHLD)(procps版本3.2.8)”
描述
在Redhat 6.6上运行ps -ef命令时,它将失败,并显示以下错误:“ ps捕获了信号17(CHLD)(procps版本3.2.8)”
原因
这是第三党的问题。 Redhat创建了以下文章来跟踪问题:
https://access.redhat.com/solutions/1235753
解析度
请参考Redhat文章以获得最新的解决方法。 https://access.redhat.com/solutions/1235753其中包括重命名libfreebl3.chk文件,如下所示:
# mv /lib/libfreebl3.chk /lib/libfreebl3.chk-bz1153759
# mv /lib64/libfreebl3.chk /lib64/libfreebl3.chk-bz1153759
附加信息
这似乎已由RedHat修复。 参见RHBA-2014:1867
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.