孤儿进程/僵尸进程/守护进程

这里写目录标题

  • 孤儿进程
  • 僵尸进程
  • 守护进程

孤儿进程

父进程在子进程推退出之前就结束了自己的生命,此时的子进程叫做孤儿进程

init进程会收留孤儿进程,变成孤儿进程的父进程,init进程的pid为1

僵尸进程

如果子进程退出,而父进程fork()之前既没安装SIGCHLD信号处理函数,又没有显式忽略该信号,也没有调用waitpid()等待子进程结束,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵尸进程,这时用ps命令就能看到僵尸进程的状态是“Z”。

如果系统中存在大量的僵尸进程,他们的进程号就会一直被占用,但是系统所能使用的进程号是有限的,系统将因为没有可用的进程号而导致系统不能产生新的进程.

避免僵尸进程的方法有以下几种:

  1. 通过 signal(SIGCHLD, SIG_IGN) 忽略SIGCHLD这个信号
  2. 父进程主动调用 wait、waitpid等函数等待子进程结束,如果尚无子进程退出wait会导致父进程阻塞
  3. 如果父进程很忙可以用注册一个SIGCHLD信号的处理函数,在信号处理函数调用wait、waitpid等待子进程退出
  4. 杀死父进程。 如果僵尸进程的父进程还存在,找到这个父进程,kill掉它。这样就会变成2的情况,init或者 systemd会负责善后工作。

守护进程

守护进程就是在后台运行,不与任何终端关联的进程,通常情况下守护进程在系统启动时就在运行,它们以root用户或者其他特殊用户(apache和postfix)运行,并能处理一些系统级的任务

你可能感兴趣的:(操作系统,孤儿进程,僵尸进程,守护进程)