#include <unistd.h>
pid_t fork(void);
返回值:
fork函数的返回值成功有两个
1)返回子进程的pid; (>0的值)//父进程
2)返回0 //子进程
返回-1,则失败。
返回值有2个的实质:
调用fork()函数后,创建了一个子进程后,----->共有了父子两个进程,如果不加以区分,二者执行的代码都是一样的,包括调用fork()之前的部分(子进程也包含了fork()前的代码,但是不执行,只有父进程执行了)---->
父进程执行fork函数,返回子进程的id;
子进程执行fork()函数后,返回0.
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main()
{
pid_t pid;
printf("begin\n");
pid = fork();
if(pid == -1)
{
perror("fork");
exit(1);
}else if(pid==0) //子进程
{
printf("this is child,pid = %u,ppid = %u\n",getpid(),getppid());
}else //父进程
{
printf("this is parent,pid = %u,ppid = %u\n",getpid(),getppid());
sleep(1);//等待子进程先结束
}
printf("end\n");
return 0;
}
运行结果:
begin执行了一次;
end执行了2次。
父进程也有父进程,父进程的父进程是bash