如何让子进程在父进程结束时(任意情况)也自动结束?

candc 2004-04-13 08:08:09
另外,我只知道该进程的名字,我怎么在另一个程序开始运行时知道之前所述进程是否在运行?目前知道的办法是:ps,然后查找。谁有高见?多谢!
...全文
744 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
firstyi 2004-04-14
  • 打赏
  • 举报
回复
mark
hiphop 2004-04-14
  • 打赏
  • 举报
回复
9 给定一个进程号,我怎样知道它是个正在运行的程序?
=====================================================

使用‘kill()’函数,而已0作为信号代码(signal number)。

从这个函数返回有四种可能的结果:

* ‘kill()’返回0

- 这意味着一个给定此进程号的进程退出,系统允许你向它发送信号。该进
程是否可以是僵死进程与不同系统有关。

* ‘kill()’返回-1,‘errno == ESRCH’

- 要么不存在给定进程号的进程,要么增强的安全机制导致系统否认它的存
在。(在一些系统上,这个进程有可能是僵死进程。)

* ‘kill()’返回-1,‘errno == EPERM’

- 系统不允许你杀死(kill)这个特定进程。这意味着要么进程存在(它又可能是
僵死进程),要么严格的增强安全机制起作用(比如你的进程不允许发送信号
给*任何人*)。

* ‘kill()’返回-1,伴以其它‘errno’值

- 你有麻烦了!

用的最多的技巧是认为调用“成功”或伴以‘EPERM’的“失败”意味着进程存
在,而其它错误意味着它不存在。

如果你特别为提供‘/proc’文件系统的系统(或所有类似系统)写程序,一个替换
方法存在:检查‘proc/进程号’是否存在是可行的。

longenic 2004-04-14
  • 打赏
  • 举报
回复
waitpid 是只针对子进程而言,
我想可以用信号实现, 但这个信号要自己定义,像用UNIX信号里面的处定义信号,SIGUSR,或SIGSUR2 ,当父进程退出的时候就发出自定义的信号,

如果是父进程非正常退出, 它也会发出一个SIGTERM的信号, 进行相应的处理就可以了
candc 2004-04-14
  • 打赏
  • 举报
回复
对,我想做到的就是想让子进程知道父进程的退出,这有可能是异常错误导致的。不过,我想楼上说的waitpid还真的可以考虑,谢谢!另外,什么叫异步使用啊?
leonf 2004-04-13
  • 打赏
  • 举报
回复
对了是任何情况退出啊,呵呵,不好意思没看清楚。
在子进程里面异步使用waitpid()实现监控父进程。
leonf 2004-04-13
  • 打赏
  • 举报
回复
父进程总有子进程的ID吧,发一个signal给子进程让他退出就好了。
truebjhz 2004-04-13
  • 打赏
  • 举报
回复
可以用进程间同步和通信的机制实现啊。

比如,子进程运行的过程中监视一个event,父进程结束时先置一下这个event,

子进程检测到后就退出。

当然你要说父进程出现了CORE之类的非法操作,那就难说了,这时应该想办法解决父进程的问题。

event是windows上的叫法,在linux上我不知道叫什么,但是方法应该是一样的。

23,126

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧