繁体   English   中英

execl()-在父进程中:SIGCHLD被ps捕获

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM