您的位置:首页 > 运维架构 > Linux

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

2015-05-10 00:01 281 查看

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编程实践教程》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: