linux fork系统调用的学习

本文详细解析了fork()系统调用的功能与使用方法,包括如何通过pid判断子进程与父进程,以及父进程如何通过wait()系统调用来回收子进程资源,避免僵尸进程的产生。

fork()系统调用简单的来讲就是创建一个新的进程。

 #include <sys/wait.h>

pid_t pid = 0;

pid = fork();
switch (pid)
{
    /* child process */
   case 0:
    {
        printf("\nchild process\n");
        exit(0);
    }
        break;

        case -1:
        {
            /* fork error */
            printf("\nfork error\n");
            exit(1);
        }
        break;

        default:
        {
            /* parent process */
            printf("\nparent process\n");
            wait(NULL);
            exit(0);
        }
        break;
}
代码这样写的原因在于fork()有一个极其特别的特点:一次调用,两次返回。
如果返回的pid<0,则说明fork fail了;
如果返回的pid=0,则说明这是从fork出来的child process中返回;
如果返回的pid>0,则说明这是从parent process中返回的,返回的pid即为child process的pid.。

那为什么要在parent process中调用wait()系统调用呢?
parent process调用wait()系统调用的目的在于当child process结束时,parent process可以回收child process的资源。

如果不调用wait(),当child process结束时,通过ps -A仍然可以找到该child process,
并且是处于<defunct>状态,也就是child process已经死掉,虽然其大部分资源已经释放,
但是仍然占用着一个进程描述符。

如果系统中有太多zombie process,那一定是有害的。
而且对于这种死掉的zombie process,kill -9 child_process_pid也无法将其杀死。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值