三种进程--孤儿进程、僵尸进程、守护进程

三种进程

孤儿进程

  • 孤儿进程:一个父进程退出,而它的一个或多个子进程还在运行,那么那些子进程将会成为孤儿进程。孤儿进程被 init 进程(进程号为1)所收养,并由 init 进程对它们完成状态收集工作。

僵尸进程

  • 僵尸进程:一个进程使用 fork 创建子进程,如果子进程退出,而父进程并没有调用 wait 或 waitpid 获取子进程的状态信息,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程。

守护进程

  • 守护进程(daemon):是一种在后台执行的程序。此类程序会被以进程的形式初始化。守护进程程序的名称通常以字母 “d” 结尾,例如,syslogd 就是管理系统日志的守护进程。

需要注意地方

  • 在 linux 系统中,每当出现一个孤儿进程的时候,内核就把孤儿进程的父进程设置为 init,而 init 进程会循环了的调用 wait(),处理已经退出的子进程。这样,当一个孤儿进程凄凉的结束其生命周期的时候, init 进程就会代表收容所一样处理它的一切善后工作。因此,孤儿进程并不会有什么危害。
  • 而对于僵尸进程,如果进程不调用 wait/waitpid 的话,那么保留的那段信息就不会释放,其进程号就会一直被占用,但是系统所能使用的进程号是有限的,如果大量的产生僵死进程,将因为没有可用的进程号而导致系统不能产生新的进程,此即僵尸进程的危害,应当避免
  • 解决僵尸进程的方法:僵尸进程并不是问题的根源,其罪魁祸首是产生大量僵尸进程的那个父进程。因此,当我们要消灭系统中大量的僵尸进程时,要做的就是把产生大量僵尸进程的那个父进程杀死(通过 kill 发送 SIGTERM 或者 SIGKILL 信号)。杀死之后,产生的僵尸进程就变成了孤儿进程,这些孤儿进程会被 init 进程接管。

猜你喜欢

转载自blog.csdn.net/qq_41782149/article/details/106113611