#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