当前位置:嗨网首页>书籍在线阅读

14-总结

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

26.4 总结

使用wait()和waitpid()(以及其他相关函数),父进程可以得到其终止或停止子进程的状态。该状态表明子进程是正常终止(带有表示成功或失败的退出状态),还是异常中止,因收到某个信号而停止,还是因收到SIGCONT信号而恢复执行。

如果子进程的父进程终止,那么子进程将变为孤儿进程,并为进程 ID 为 1 的init进程接管。

子进程终止后会变为僵尸进程,仅当其父进程调用 wait()(或类似函数)获取子进程退出状态时,才能将其从系统中删除。在设计长时间运行的程序,诸如shell程序以及守护进程(daemon)时,应总是捕获其所创建子进程的状态,因为系统无法杀死僵尸进程,而未处理的僵尸进程最终将塞满内核进程表。

捕获终止子进程的一般方法是为信号SIGCHLD设置信号处理程序。当子进程终止时(也可选择子进程因信号而停止时),其父进程会收到SIGCHLD信号。还有另一种移植性稍差的处理方法,进程可选择将对SIGCHLD信号的处置置为忽略(SIG_IGN),这时将立即丢弃终止子进程的状态(因此其父进程从此也无法获取到这些信息),子进程也不会成为僵尸进程。

更多信息

请参考列于24.6节中的更多信息来源。