c - fork() 函数在这个程序中是如何工作的?

标签 c linux ubuntu process fork

我在使用这个程序时遇到了一些问题。我知道 fork() 函数的作用。它用于从现有流程创建新流程。新进程称为子进程,现有进程称为父进程。 parent 返回 child 的 pid, child 返回 0。也就是说,我很难理解这两个 fork 函数在这个程序中的作用。

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

int main()
{
    int i,y,x=1;
    for (i=0;i<4;i++)
        if(x && fork())
        {
            y = i;
            x = 0;
        }
    if (x) y = i;
    fork();
    printf("%i\n",y);
}

最佳答案

首先断言:fork 不会失败。事实并非如此,但更简单

如果(x && fork ()) -> 如果 x == 1 并且如果 fork 为父亲返回则为真 然后是假的。 所以 child 也会创造一个 child (除了最后一个)但是 父亲只生了一个 child 。

在循环之后你有 1 + 4 个新进程。 这 5 个进程执行最后一个 fork(),你有 10 个进程。

由于任务的调度,输出结果是不确定的。

关于c - fork() 函数在这个程序中是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31194822/

相关文章:

c - 如何在ATMEL studio C程序中读取和写入同一端口

ubuntu - 将字符串对象添加到 gArray

c - 在C程序中使用sed时出现"unknown escape sequence"警告

c - 将 C 数组打印到终端

c、控制到达c中非void函数的结尾

regex - sed -E 和 sed -e 有什么区别

python - 如何从 Shell 捕获错误并重新启动 Python

java - 无法使用 wget 在 CentOS 机器上安装 oracle jdk

linux - 如何在 linux ubuntu server 12.04 中用一个命令重命名多个前缀文件名

python - 在桌面壁纸 Ubuntu 上转换 TensorFlow 对象检测的输出