Linux中的Zombie进程和孤儿进程有着不同的特点和状态:
- Zombie进程:
- Zombie进程是指一个已经终止运行的子进程,但是其父进程还没有调用wait()或waitpid()来获取其终止状态。在这种情况下,子进程的进程描述符仍然存在,但是进程控制块已经被释放,所以不能再执行任何代码。
- Zombie进程会在进程表中占用资源,直到父进程调用wait()或waitpid()来处理它的终止状态,并释放其资源。
- 当一个进程收到SIGCHLD信号时,表示有一个子进程已经终止,此时父进程需要调用wait()或waitpid()来处理子进程的退出状态,否则该子进程就会变成Zombie进程。
- 孤儿进程:
- 孤儿进程是指其父进程已经终止或者已经退出,但是子进程还在运行。这种情况下,子进程会被init进程(进程号为1)接管,init进程会成为孤儿进程的新父进程。
- 孤儿进程会继续运行直到其自己终止或者被init进程处理。
- 孤儿进程不会变成Zombie进程,因为它的父进程已经终止,所以没有父进程来处理其终止状态。
总结:
- Zombie进程是已经终止但父进程未处理的子进程。
- 孤儿进程是其父进程已经终止或退出的子进程。
- Zombie进程会在进程表中占用资源,直到其父进程处理其终止状态。
- 孤儿进程会被init进程接管,不会变成Zombie进程。