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

这里写目录标题

孤儿进程

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

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)运行,并能处理一些系统级的任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值