输入指令: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之后,父子的返回值不同,所以我们通常用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;
}
到此结束,感谢大家观看 !