1、僵尸进程
僵尸进程:一个进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。unix提供了一种机制可以保证只要父进程想知道子进程结束时的状态信息, 就可以得到。这种机制就是(僵尸进程存在的意义): 在每个进程退出的时候,内核释放该进程所有的资源,包括打开的文件,占用的内存等。 但是仍然为其保留一定的信息(包括进程号the process ID,退出状态the termination status of the process,运行时间the amount of CPU time taken by the process等)。直到父进程通过wait / waitpid来取时才释放。 但这样就导致了问题(僵尸进程的危害),如果进程不调用wait / waitpid的话,那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程. 此即为僵尸进程的危害,应当避免。
2、信号处理:
SIGCHLD信号是内核在任何一个进程终止时发给它的父进程的一个信号。通过调用sigaction函数设定一个信号的处置。
A. 捕获信号,提供对特定信号的信号处理函数;
B. 把某个信号的处置设定为SIG_IGN,来忽略它;(SIGKILL、SIGSTOP不能被忽略)
C. 把某个信号的处置设定为SIG_DEF,来启动它的默认值;(SIGCHLD、SIGURG均默认被忽略)
3、wait函数和waitpid函数
&#