子进程
与父进程的关系
一个进程可能下属多个子进程,但最多只能有1个父进程,而若某一进程没有父进程,则可知该进程很可能由内核直接生成。在Unix与类Unix系统中,进程ID为1的进程(即init进程)是在系统引导阶段由内核直接创建的,且不会在系统运行过程中终止执行(可参见Linux启动流程);而对于其他无父进程的进程,则可能是为在用户空间完成各种后台任务而执行的。
当某一子进程结束、中断或恢复执行时,内核会发送SIGCHLD信号予其父进程。在默认情况下,父进程会以SIG_IGN函数忽略之[1]。
“孤儿进程”与“僵尸进程”
在对应的父进程结束执行后,进程就会变成孤儿进程,但之后会立即由init进程“收养”为其子进程。
某一子进程终止执行后,若其父进程未提前调用wait
,则内核会持续保留子进程的退出状态等信息,以使父进程可以wait
获取之[2] 。而因为在这种情况下,子进程虽已终止,但仍在消耗系统资源,所以其亦称僵尸进程。wait常于SIGCHLD信号的处理函数中调用。
参见
- exec
- pstree,以之可在UNIX系统中以
pstree PID
的方式查询PID对应进程之子进程[5]
参考资料
- : overview of signals – 参考,单一UNIX®规范第7期,由國際開放標準組織发布
- : wait for process to change state – 参考,单一UNIX®规范第7期,由國際開放標準組織发布
- http://fuse4bsd.creo.hu/localcgi/maSA_NOCLDWAITSA_NOCLDWAITn-cgi.cgi?signal+3%5B%5D
- : examine and change a signal action – 参考,单一UNIX®规范第7期,由國際開放標準組織发布
- : print process trees – 参考,单一UNIX®规范第7期,由國際開放標準組織发布
This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.