说到 fork ,大家应该都知道它的作用是从已经存在的进程中创建一个子进程。
可是这个过程中 fork 到底做了什么呢?
让我们来看看一个简单的程序。
#include <stdio.h>
#include <unistd.h>
int main()
{
fork();
printf("a\n");
return 0;
}
这个程序运行结果为
a
a
大家应该都可以理解,程序在执行到 fork 时,产生了一个子进程,父子进程都执行了这个 printf 语句,所以打印了两个a。
既然 fork 后可以产生一个子进程,那该怎么用呢?总不可能产生一个子进程来做和父进程相同的事情吧?
其实 fork 是有返回值的,fork 执行成功后会返回两次,一次是父进程的,一次是子进程的。父进程得到的返回值是子进程的 pid ,而子进程返回 0。如果失败则返回值小于 0。
所以我们可以这样处理来实现简单的并发处理。
#include <stdio.h>
#include <unistd.h>
int main()
{
pid_t pid = fork();
if(pid >0)
{
printf("i am father :%d\n", getpid());
printf("my child :%d\n", pid);
//父进程处理的内容
}
else if(pid == 0)
{
printf(