linux 进程 清理,Linux僵尸进程清除方法

原标题:Linux僵尸进程清除方法

今天给大家说一下Linux的僵尸进程,什么是僵尸进程呢?僵尸进程就是进程已经退出,但它的父亲进程还没有回收内核资源的进程为僵尸进程,即该进程在内核空间的 PCB(进程控制块) 没有释放,raksmart服务器。

以下是僵尸进程的示例程序,在此程序中,父进程让子进程退出但不处理,然后父进程调用 system 函数列出当前前台进程信息,代码如下:

#include

#include

#include

int main()

{

int pid;

if((pid = fork()) == -1)

perror("fork err");

else if(!pid){

exit(0);

}

sleep(1);

system("ps");

return 0;

}

运行结果如下:

652cf8b3261786e1ec0ec86c706b83af.png

红框的进程即为僵死状态。

怎样来清除僵尸进程:

1.改写父进程,在子进程死后要为它收尸。具体做法是接管SIGCHLD信号。子进程死后,会发送SIGCHLD信号给父进程,父进程收到此信号后,执行waitpid()函数为子进程收尸。

2.把父进程杀掉。父进程死后,僵尸进程成为"孤儿进程",过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进程也跟着消失。

wait()与waitpid()

wait():

调用 wait() 函数的父亲进程将阻塞式等待该进程的任意一个子进程结束后,回收该子进程的内核进程资源。

waitpid():

waitpid()函数可以用来等待指定子进程(指定PID的子进程)结束。函数声明如下:

b8b620c42c2a06c607da2135eadca103.png

可以通过 /proc//maps 文件查看进程资源。返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值