LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1542|回复: 5

关于SIGCHLD

[复制链接]
发表于 2005-8-26 18:48:48 | 显示全部楼层 |阅读模式
这个SIGCHLD信号是不是应该规定只有子进程发给父进程,没关系的进程不能乱发?
如一个进程捕捉SIGCHLD信号,处理函数中调用wait()函数,如果随便一个进程(有相应的权限)给他发个SIGCHLD信号,进程就阻塞在那了,直到它被中断掉或有子进程退出。
发表于 2005-8-27 10:07:26 | 显示全部楼层
Post by dongp
这个SIGCHLD信号是不是应该规定只有子进程发给父进程,没关系的进程不能乱发?
如一个进程捕捉SIGCHLD信号,处理函数中调用wait()函数,如果随便一个进程(有相应的权限)给他发个SIGCHLD信号,进程就阻塞在那了,直到它被中断掉或有子进程退出。

信号处理函数的执行和进程的执行是异步的。所以进程不会阻塞。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-8-28 10:23:53 | 显示全部楼层
我在HP UNIX上试的啊,你自己试试看
回复 支持 反对

使用道具 举报

发表于 2005-8-28 15:47:34 | 显示全部楼层
我只有debian,别的没有。
回复 支持 反对

使用道具 举报

发表于 2005-8-29 09:20:56 | 显示全部楼层
这个SIGCHLD信号是不是应该规定只有子进程发给父进程,没关系的进程不能乱发?
如一个进程捕捉SIGCHLD信号,处理函数中调用wait()函数,如果随便一个进程(有相应的权限)给他发个SIGCHLD信号,进程就阻塞在那了,直到它被中断掉或有子进程退出。


这是正常的吧. 你在SIGCHILD里调用WAIT当然会这样了. 即然已经执行到了SIGCHILD处理函数,说明子进程已经发送了退出的通知,你再调用WAIT当然就再也等不到它的第二次通知了. 除非其它子进程发送.
回复 支持 反对

使用道具 举报

发表于 2007-4-24 10:41:20 | 显示全部楼层
"这个SIGCHLD信号是不是应该规定只有子进程发给父进程,没关系的进程不能乱发?"
---
各位老兄,当子进程结束时,SIGCHLD信号好象是内核发给父进程的,你们有没有搞错。
如果子进程结束前父进程已经结束,则内核会让init(1)来接管此子进程。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表