linux环境下fork()函数简介

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);
}
}

运行结果
linux环境下fork()函数简介
我们可以看出if语句中的两个条件本来只能是满足哪个输出哪个,但是这一次两个if语句中的内容都输出了,说明有两次返回值,分别满足两个if的条件

PS:关于创建的两个进程到底谁时父线程先执行,还是子线程先执行,我一直没搞明白,可以看一部分参考资料
1,Linux fork之后,到底是子进程先运行还是父进程先运行
2,OS中关于父子进程的执行顺序和多个子进程之间的执行顺序
3,fork之后,父子进程的先后执行顺序如何反映?
连续调用多次fork函数

上一篇:ARM发力物联网


下一篇:数据结构排序算法