程序if(fork() == 0)是啥意思?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序if(fork() == 0)是啥意思?相关的知识,希望对你有一定的参考价值。

fork()函数的作用:新建一个子进程。
可以这么看,fork的意思就是分支,所以就相当于在当前进程所运行到的位置分一个支流出来,然后,新进程与老进程都是从分叉点开始继续运行(分叉点也就是fork()函数调用处)。

至于fork()函数的返回值:
子进程返回:0
父进程返回:>0的整数(返回子进程ID号)
错误返回:-1

因此,若没有错误,对于:
if(fork()==0)
block A
else
block B
在新进程中block A的内容会被执行,而在老进程中block B会被执行。
参考技术A linux下C语言可以用fork()建立子进程。
fork函数返回两个值,对于子进程,返回0; 父进程,返回子进程ID. 所以用
if(fork()==0)
子进程执行的代码段;
else
父进程执行的代码段;本回答被提问者和网友采纳

一段有意思的fork()程序

献上代码,不成敬意:

#include <unistd.h>
#include <stdio.h>

int main()
{
    int i = 0;

    if(fork())
        i++;
    if(fork())
        i++;
    if(fork())
        i++;

    printf("i = %d\n",i);

    return 0;
}

一段看似简单但实际上却很难一下说出结果的程序,最后的输出会是什么呢?

首先说一下fork的定义:

fork函数将运行着的程序分成两个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这两个进程中的线程继续执行,就像是两个用户同时启动了该应用程序的两个副本。 --- 《百度百科》

返回值:

若成功调用一次则返回两个值,子进程返回0,父进程返回子进程标记(>0);否则,出错返回-1。

这样的话,我们似乎知道了些什么。父进程的返回值是1,那么只有在父进程中才会执行 i++ 操作,子进程则不会执行。

talk is cheap, show you the picture(程序的整个流程):

技术分享图片

有一点需要注意:

子进程只是父进程存储空间的“副本”,这意味着父子进程间不共享这些存储空间。这就是为什么i在子进程中进行加1操作,而父进程中i值不变的原因。

最后贴上该程序在Linux上的运行结果:
技术分享图片

与分析一致,结题。


以上是关于程序if(fork() == 0)是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

贪吃蛇程序中乘方部分是啥意思?

system在C语言里是啥意思

关于啥是啥是CGI

编程里面return是啥意思

github的fork是啥意思

这些词在 Git 中是啥意思:Repository、fork、branch、clone、track?