#冲刺创作新星#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);
}
}
运行结果
我们可以看出if语句中的两个条件本来只能是满足哪个输出哪个,但是这一次两个if语句中的内容都输出了,说明有两次返回值,分别满足两个if的条件
PS:关于创建的两个进程到底谁时父线程先执行,还是子线程先执行,我一直没搞明白,可以看一部分参考资料
1,Linux fork之后,到底是子进程先运行还是父进程先运行
2,OS中关于父子进程的执行顺序和多个子进程之间的执行顺序
3,fork之后,父子进程的先后执行顺序如何反映?
连续调用多次fork函数
fork系统调用用于创建一个新进程,称为子进程,它与进程(称为系统调用fork的进程)同时运行,此进程称为父进程。创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同的pc(程序计数器),相同的CPU寄存器,在父进程中使用的相同打开文件。
它不需要参数并返回一个整数值。下面是fork()返回的不同值。
负值:创建子进程失败。
零:返回到新创建的子进程。
正值:返回父进程或调用者。该值包含新创建的子进程的进程ID 。