社区
Linux/Unix社区
帖子详情
父进程无法接收到子进程退出时发出的SIGCHLD信号
Gishell123
2007-07-02 06:18:12
相同的程序,在自己的SUSE/Red hat环境下都可以收到子进程退出时发出的SIGCHLD信号。
但是到客户(OS:SUSE)那边就是无法收到。
请问这个是什么原因造成的?是客户(OS:SUSE)的环境造成的吗?如果是怎么确认是环境问题?
谢谢。
...全文
863
13
打赏
收藏
父进程无法接收到子进程退出时发出的SIGCHLD信号
相同的程序,在自己的SUSE/Red hat环境下都可以收到子进程退出时发出的SIGCHLD信号。 但是到客户(OS:SUSE)那边就是无法收到。 请问这个是什么原因造成的?是客户(OS:SUSE)的环境造成的吗?如果是怎么确认是环境问题? 谢谢。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Gishell123
2007-07-29
打赏
举报
回复
A里面没有屏蔽SIGCHLD,A会接收它的子进程的SIGCHLD,并做一些事后处理。
NC
2007-07-09
打赏
举报
回复
由于环境是在客户那边,所与无法调试。
大概是这样的:
父进程A fork B。(A还可以fork 其他子进程)
B fork C。
如果按照这个流程,B无法收到C退出后发出的SIGCHLD,
但是如果用script启动B,那么被B fork 出的C退出后,可以收到C发出的SIGCHLD。
这个现象大概是什么原因造成的呢?
==============================================================
会不会是你在A里面屏蔽了SIGCHLD?
dai_weitao
2007-07-09
打赏
举报
回复
你的父进程A是怎么处理SIGCHLD信号的
Gishell123
2007-07-08
打赏
举报
回复
顶一下。
Gishell123
2007-07-04
打赏
举报
回复
To Ropyn(剑心):
确认定了_XOPEN_SOURCE,但是现在还不确认是否第一个子进程的SIGCHLD能够接收到。
请看楼上的流程,A是从shell直接启动的。如果B也是从shell通过脚本启动,那么可以收到C的SIGCHLD。
Gishell123
2007-07-04
打赏
举报
回复
由于环境是在客户那边,所与无法调试。
大概是这样的:
父进程A fork B。(A还可以fork 其他子进程)
B fork C。
如果按照这个流程,B无法收到C退出后发出的SIGCHLD,
但是如果用script启动B,那么被B fork 出的C退出后,可以收到C发出的SIGCHLD。
这个现象大概是什么原因造成的呢?
DanXer
2007-07-03
打赏
举报
回复
4,5楼瞎说,不是这个原因.
SA_NOCLDSTOP是说子进程在STOP状态时(收到SIGSTOP,SIGTTIN,SIGTTOUT)不发送SIGCHLD给父,但是当中止时(SIGKILL,SIGTERM)还是会发SIGCHLD给父进程。
考虑看编译时是否定义了_XOPEN_SOURCE,而且父进程是否有多个子进程,在第一个子中止后,第二个子的SIGCHLD就收不到了。
OstrichFly
2007-07-03
打赏
举报
回复
是啊,自己屏蔽掉了,LZ解释一下为什么要这样?
plusboy
2007-07-03
打赏
举报
回复
利用wait看看能得到什么
dai_weitao
2007-07-02
打赏
举报
回复
你搞什么, 先用NOCLDSTOP把SIGCHLD屏蔽, 再调用, 还问为什么父进程收不到CHLD, 捣乱啊你?
Gishell123
2007-07-02
打赏
举报
回复
int sig = SIGCHLD;
struct sigaction act;
struct sigaction oact;
::sigemptyset ( &act.sa_mask );
act.sa_flags = 0;
if ( sig == SIGCHLD )
act.sa_flags |= SA_NOCLDSTOP;
int ret = ::sigaction ( sig, &act, &oact );
NC
2007-07-02
打赏
举报
回复
把你的程序贴出来看看。
cceczjxy
2007-07-02
打赏
举报
回复
描述清楚一点你的问题呀
检测
子
进程
退出
的方法
当
子
进程
退出
时
,操作系统可能会向
父
进程
发送一个
SIGCHLD
信号
,通知它
子
进程
的状态发生了变化。但默认情况下,收到
SIGCHLD
信号
并不会自动导致
父
进程
做任何处理,需要
父
进程
自己捕获并处理这个
信号
。 **waitpid函数*...
特殊
进程
之僵尸
进程
测试代码
3. 使用`SIGCLD`
信号
的默认处理方式,这会使
父
进程
在
接收
到
子
进程
退出
信号
时
自动调用`wait()`。 现在,我们关注到提供的"僵尸
进程
测试代码"。这个代码很可能是用来演示如何创建和处理僵尸
进程
的。通常,这样的代码...
僵尸
进程
介绍以及防范
2. 设置
信号
处理器:
父
进程
可以设置
SIGCHLD
信号
处理器,在
接收
到
子
进程
退出
的通知
时
进行回收。 3. 使用`fork()`-`exec()`模式:先`fork()`创建
子
进程
,然后在
子
进程
中执行`exec()`系列函数替换
进程
映像,这样即使
父
...
Linux基础知识(10-10)-
进程
管理.pdf
- 当
子
进程
退出
时
,会向
父
进程
发送`
SIGCHLD
`
信号
,携带
子
进程
的详细信息,如
进程
ID、状态和CPU使用
时
间。这允许
父
进程
通过`wait()`或`waitpid()`来收集
子
进程
的
退出
信息。 4. **wait() 和 waitpid()** - `wait()`...
linux中的僵尸
进程
2. **设置
信号
处理程序**:
父
进程
可以为`
SIGCHLD
`
信号
设置一个
信号
处理程序,在
接收
到
信号
后执行`wait`或`waitpid`函数。 3. **忽略`
SIGCHLD
`
信号
**:如果不关心
子
进程
的状态,可以忽略`
SIGCHLD
`
信号
。但这样做可能...
Linux/Unix社区
23,217
社区成员
74,540
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章