当前位置: 技术问答>linux和unix
如何得知子孙进程中有孤立进程产生
来源: 互联网 发布时间:2015-10-26
本文导语: 在正常的操作下,init确定getty正在工作着(用以允许用户登录),并且收取孤立进程(父辈进程已结束的进程;在UNIX中所有的进程必须属于单棵进程树,所以孤立进程必须被收取)。 请问init是如何知道有孤立进程...
在正常的操作下,init确定getty正在工作着(用以允许用户登录),并且收取孤立进程(父辈进程已结束的进程;在UNIX中所有的进程必须属于单棵进程树,所以孤立进程必须被收取)。
请问init是如何知道有孤立进程产生的呢?
如果我想自己维护一棵进程树,即一个类似init的进程,要知道何时我的子孙进程中产生了一个孤立进程,并将其收取.
请问init是如何知道有孤立进程产生的呢?
如果我想自己维护一棵进程树,即一个类似init的进程,要知道何时我的子孙进程中产生了一个孤立进程,并将其收取.
|
那就复杂点。
1.system("ps -Al >log");
2.分析文件log,提取PPID=1的进程。
3.利用kill()或者singal()进行相应处理。
但是问题是并非所有ppid=1的进程都是孤立进程,还需别的判断。建议参考《UNIX环境高级编程》第九章。
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第八章第五节
不过,这个行为是kernel完成的我并没有说错。
--------------------------------------------------
在一个进程终止时,内核逐个检查所有活动进程,以判断它是否是正要终止的进程的子进程,如果是,则该进程的父进程I D就更改为1(init进程的ID)
--------------------------------------------------
引自APUE第八章第五节