Linux中建立新的进程,父进程等待子进程的退出

fork函数

一个进程可以调用fork()来复制自己,复制的时候这两个进程完全相同,之后便分道扬镳。
头文件: #include<unistd.h>
函数原型:pid_t result =fork(void)
返回值:

  • 如果错误,返回-1
  • 返回0到子进程
  • 返回子进程的pid到父亲进程

根据不同的返回值,可以判断当前运行的是子进程还是父进程

父进程怎么等待子进程退出呢?

父进程调用wait函数等待子进程退出
头文件:# include <sys/types. h>
     # include <sys/wait. h>

函数原型:pid_t result = wait(int* statusptr)
参数:子进程的运行结果
返回值:错误的话返回-1,正常返回结束进程(这里就是子进程)的进程id

代码

#include <stdio.h>
#define DELAY 2
int main()
{
    int newpid;
    void child_code();
    void parent_code();

    printf("befor: mypid is %d\n",getpid());
    if((newpid = fork()) == -1) /*复制出一个子进程*/
        perror("fork");
    else if(newpid == 0)   /*子进程的fork返回0*/
        child_code(DELAY);
    else                   /*父进程*/
        parent_code(newpid);
    return 0;
}

/*子进程执行完后调用exit()*/
void child_code(int delay)
{
    printf("child %d here. Will sleep for %d seconds\n",getpid(),delay);
    sleep(delay);
    printf("child done. About to exit\n");
    exit(17);
}

/*父进程等待子进程的exit,并接收wait()的返回值(即子进程的pid)*/
void parent_code(int childpid)
{
    int wait_rv;      /*return value from wait()*/
    wait_rv = wait(NULL);
    printf("done waiting for %d. Wait returned:%d\n",childpid,wait_rv);
}

截图

这里写图片描述

参考文献《Unix/Linux编程实践教程》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值