fork()函数原型:pid_t fork(void); 需要引入的头文件:<unistd.h> 功能: ①fork函数通过系统调用创建一个与原来进程几乎完全相同的进程,并且两个新的进程将并发执行。 ②若fork函数成功调用,一次会返回两个值,子进程返回0,父进程返回子进程ID(pid),若fork函数调用失败,返回-1 相关函数: (1)getpid 函数原型:pid_t getpid(void) 功能:返回当前进程的PID (2)getppid 函数原型:pid_t getppid(void) 功能:返回父进程的标识
fork函数一次调用示例
#include<stdio.h>
#include<unistd.h>
int main()
{
pid_t pid=fork();//创建子进程
//如果创建子进程失败,pid的返回值小于0,子进程创建出现错误
//如果创建子进程成功,pid返回值有两个,子进程返回0,父进程返回子进程ID
if(pid<0)
{
printf("创建子进程失败!\n");
}
if(pid==0)
{
printf("这个是执行子进程的输出结果,pid=%d\n",getpid());
}
else
{
printf("这个是执行父进程的输出结果,pid=%d\n",getpid());
printf("父进程创建的子进程的pid为,pid=%d\n",pid);
}
}
运行结果
我们可以看出if语句中的两个条件本来只能是满足哪个输出哪个,但是这一次两个if语句中的内容都输出了,说明有两次返回值,分别满足两个if的条件
PS:关于创建的两个进程到底谁时父线程先执行,还是子线程先执行,我一直没搞明白,可以看一部分参考资料
1,Linux fork之后,到底是子进程先运行还是父进程先运行
3,fork之后,父子进程的先后执行顺序如何反映? 连续调用多次fork函数