一、fork的基本认识
输入指令:man 2 fork 就可以看到fork的介绍( q 退出)
fork()的参数为空,作用是:在调用fork()之后,创建一个子进程,子进程与父进程共享fork()之后的代码,数据各自私有一份,采用的是写时拷贝。
返回值:父进程的返回值是子进程的pid,子进程的返回值是0。出错的话父进程返回-1,并且没有子进程被创建。
#include<stdio.h>
#include<unistd.h>
int main()
{
pid_t id = fork();
printf("mypid is %d, fork() return %d\n", getpid(), id);
return 0;
}
运行结果第一行是父进程的,它的pid是31243,fork()的返回值是子进程的pid;第二行是子进程的,它的pid是41244,fork()的返回值是0。
补充知识: 1、getpid()可以获取当前进程的pid,getppid()可以获取当前进程的父进程的pid。 2、父子进程不一定谁先执行,并且他们都是到return结束或者用exit(退出码) 退出。
二、fork的使用
因为fork之后,父子的返回值不同,所以我们通常用if语句来让父子进程执行不同的任务。
#include<stdio.h>
#include<unistd.h>
#include<string.h>
#include<stdlib.h>
int main()
{
pid_t id = fork();
if(id < 0)
{
perror("fork fail");
exit(-1);
}
else if (id == 0)
{
//子进程
printf("I am child process\n");
exit(0);//子进程退出
}
//父进程
printf("I am parent process\n");
return 0;
}
到此结束,感谢大家观看 !