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编程实践教程》