当前位置:  技术问答>linux和unix

如何得知子孙进程中有孤立进程产生

    来源: 互联网  发布时间:2015-10-26

    本文导语:  在正常的操作下,init确定getty正在工作着(用以允许用户登录),并且收取孤立进程(父辈进程已结束的进程;在UNIX中所有的进程必须属于单棵进程树,所以孤立进程必须被收取)。 请问init是如何知道有孤立进程...

在正常的操作下,init确定getty正在工作着(用以允许用户登录),并且收取孤立进程(父辈进程已结束的进程;在UNIX中所有的进程必须属于单棵进程树,所以孤立进程必须被收取)。

请问init是如何知道有孤立进程产生的呢?
如果我想自己维护一棵进程树,即一个类似init的进程,要知道何时我的子孙进程中产生了一个孤立进程,并将其收取.

|
那就复杂点。
1.system("ps -Al >log");
2.分析文件log,提取PPID=1的进程。
3.利用kill()或者singal()进行相应处理。

但是问题是并非所有ppid=1的进程都是孤立进程,还需别的判断。建议参考《UNIX环境高级编程》第九章。

|
子进程里调用getppid(),得到父进程pid,如果是1,发信号给你的init进程,通知现在是孤儿进程。

|
一个进程结束的时候kernel自己会把这个进程的子进程设置为这个结束的进程的父进程的子进程……这个不需要额外的干预,kernel自己完成……

|
内核在处理_exit系统调用时,就会将结束的进程的资源释放,在释放任务结构时就会将它的子进程的父进程标识指向所结束的进程的父进程

|
哦,对,我搞错了,父进程结束的进程的确是成为init的子进程(这个可以参考APUE第八章,但是我好像曾经在哪里看到过父进程结束的进程的父进程被设置为原父进程的父进程的这个说法,有待进一步查证)。

不过,这个行为是kernel完成的我并没有说错。
--------------------------------------------------
在一个进程终止时,内核逐个检查所有活动进程,以判断它是否是正要终止的进程的子进程,如果是,则该进程的父进程I D就更改为1(init进程的ID)
--------------------------------------------------
引自APUE第八章第五节

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 急,急,急:如何得知JEditorPane内是否选取文字?
  • 请问如何用C得知某个目录所占用的磁盘空间?
  • 我装的linux,但是怎样得知自己系统的版本啊?
  • 機架式pc擁有12個網路chip如何得知封包由哪個interface出去的?
  • 在make install之前,运行configure 的时候,如何得知全部支持的参数
  • 如何得知一个客户端的IP是静态的还是动态的?
  • 博客 iis7站长之家
  • 请问Unix下是否有函数得知“指定文件是否被打开”?
  • 请问如何得知linux中是否安装有xfree86?
  • 如何得知某用户,当前是否已近登录系统?
  • 如何得知,当前所有每个用户的磁盘使用情况
  • 如何让自己的程序得知linux系统即将重启还是关机?
  • 怎样从applet中得知浏览器是IE还是Netscape
  • 请问如何得知某个usb设备已经插上并且可用?
  • 用linux做局域网服务器,结果上网很慢,怎样得知服务器网络方面的运行状态 --急急急在线等--
  • 紧急! 如何得知一特定表是否存在的信息?(ORACLE).....
  • 做网页有时会用到"HTTP_USER_AGENT"或"REMOTE_ADDR"这样的参数,这到底是一个什么参数,如何得知这一类参数的全部信息?谢谢
  • 各位,线程的run方法不允许抛出异常,那我的调用程序如何得知线程里发生了异常?
  • 如何得知对方已关闭连接?
  • 急问:如何得知linux下设备的使用情况


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3