浅谈fork函数:
首先,我们先了解一下什么是fork函数:
fork系统调用用于创建一个新进程,称为子进程,它与进程(称为系统调用fork的进程)同时运行,此进程称为父进程。创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同的pc(程序计数器),相同的CPU寄存器,在父进程中使用的相同打开文件。
from:百度百科
既然会有两个进程,那我们又怎么去区分子进程和父进程呢?
这还要从我们的题目——两次返回 说起:
既然有两个进程,刚好就有两次返回对吧,那么他们会返回什么呢?
返回值:
负数:创建子进程失败
0:返回到子进程
正数:父进程的PID(地址)
题目1:
void fork0()
{
if (fork() == 0) {
printf("Hello from child\n");
}
else {
printf("Hello from parent\n");
}
}
运行结果:
题目二:
#include "csapp.h"
int main(int argc, char *argv[])
{
pid_t pid;
int x = 1;
pid = fork(); //line:ecf:forkreturn
if (pid == 0) { /* Child */
printf("Child\n");
}
printf("Done\n");
return 0;
}
运行结果:
经过两道题,我们清楚地看到,每次都经历一次调用之后,返回了两次,并进行输出。
总之,fork函数就是一次调用,两次返回!