Linux僵尸进程简述

一、僵尸进程产生原因

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

二、僵尸进程解决办法
  1. 通过信号机制
    子进程退出时向父进程发送SIGCHILD信号,父进程处理SIGCHILD信号。在信号处理函数中调用wait进行处理僵尸进程。

  2. fork两次
    父进程创建子进程A,子进程A再创建子进程B,然后子进程A退出,z这样子进程B就交给init进程处理了。init进程可以处理僵尸进程。

  3. fork函数
    fork是用来创建子进程的,这个函数的特别之处在于一次调用,两次返回,一次返回到父进程中,一次返回到子进程中,我们可以通过返回值来判断其返回点:
     

    pid_t child = fork();
    if( child < 0  ) {     //fork error.
        perror("fork process fail.\n");
    } else if( child ==0  ) {   // in child process
        printf(" fork succ, this run in child process\n ");
    } else {                        // in parent process
        printf(" this run in parent process\n ");
    }

三、ps指令查看僵尸进程
ps -A -ostat,pid,cmd |grep -iE '^z'

-A 显示所有任务

-o 按照指定格式输出

grep -iE 显示z开头的行,不区分大小写

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值