fork()函数和僵尸进程和孤儿进程

本文介绍了Linux下使用fork()函数创建进程可能导致的孤儿进程和僵尸进程问题。孤儿进程会被init收养,而僵尸进程是子进程结束后,父进程未调用wait()回收资源的状态。通过SIGCHILD信号处理或双重fork()方法可以避免僵尸进程的产生。
摘要由CSDN通过智能技术生成

 

       Linux 下通过fork()函数来产生新的进程,新的进程和原来的进程的各种数据和代码几乎是一模一样的,但是创建了新的进程之后,这个两个的进程就是异步的,指不定是谁先结束,这个时候就有可能父进程先结束,子进程没有结束,也有可能子进程先结束,然后父进程在结束。这个就会有孤儿进程和僵尸进程的问题。

   孤儿进程,就是没有父进程被杀死了,没有了父进程,然后统一的被孤儿院进程init收养。所以一般没有什么危害。

   僵尸进程就是子进程退出了之后没有父进程没有调用wait()或者是waitpid()进行资源回收。没有人管了,但是子进程的进程描述符还在系统里面,所以叫做僵尸进程,通过ps指令可以看到状态为z的。

   说句不礼貌的话,孤儿进程就是“父亲死了,没有人管 。僵尸进程是”死了没有人收尸”。仅仅是为了记忆。没有别的意思。

   首先,每个进程在运行的时候回有各自的pid 这个pid 是 是表示该进程的唯一的ID 号的。 可以通过getpid() 函数获得,通过getppid()获得其父进程的pid。


进程创建

当我们用fork()函数进程创建子进程的时候,通常是这么写的

void main()
{
    //前面一大堆程序

    pid_t pid;
    pid=fork();
    if(pid ==0)
    {
      //子进程处理的内容
    }else
    {
      //父进程处理的内容
    }


}

      父进程和子进程的代码一模一样,但是不会执行fork()函数,不然就子进程再创建子进程,没完没了了。子进程不

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值