在linux下父进程和子进程的概念是什么?如何理解?如何显示?
当一个子进程结束运行(一般是调用exit、运行时发生致命错误或收到终止信号所导致)时,子进程的退出状态(返回值)会回报给操作系统,系统则以SIGCHLD信号将子进程被结束的事件告知父进程,此时子进程的进程控制块(PCB)仍驻留在内存中。一般来说,收到SIGCHLD后,父进程会使用wait系统调用以取得子进程的退出状态,然后内核就可以从内存中释放已结束的子进程的PCB;而如若父进程没
·
当一个子进程结束运行(一般是调用exit、运行时发生致命错误或收到终止信号所导致)
时,子进程的退出状态(返回值)会回报给操作系统,系统则以SIGCHLD信号将子进程被结束
的事件告知父进程,此时子进程的进程控制块(PCB)仍驻留在内存中。一般来说,收到
SIGCHLD后,父进程会使用wait系统调用以取得子进程的退出状态,然后内核就可以从内存中
释放已结束的子进程的PCB;而如若父进程没有这么做的话,子进程的PCB就会一直驻留在内
存中,也即成为僵尸进程。 孤儿进程则是指父进程结束后仍在运行的子进程。在类UNIX
系统中,孤儿进程一般会被init进程所“收养”,成为init的子进程。 为避免产生僵尸
进程,实际应用中一般采取的方式是: 1.将父进程中对SIGCHLD信号的处理函数设为
SIG_IGN(忽略信号); 2.fork两次并杀死一级子进程,令二级子进程成为孤儿进程而
被init所“收养”、清理。
更多推荐
已为社区贡献2条内容
所有评论(0)