-2

问题一:

鉴于下面的代码,我知道当您调用分叉时,大多数情况下它的资源都会传递给子进程。现在,我查找的几乎每个 Fork 示例都像我所拥有的那样设置。从它的外观来看,我不明白父进程是如何被调用的,因为它位于 else 块中。

问题乙:

子进程中的代码执行完后,是不是自动知道现在要进入父进程了?我在其他示例中也看到了等待(NULL),如果它无论如何都要进入 else 块,那么等待的作用是什么。假设我想执行同一个父进程的两个子进程,这两个进程会并行运行,然后在完成后运行父进程的代码吗?谢谢。

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

int main()
{
        pid_t pid;
        pid = fork();

        if(pid == 0){
                printf("Hello World");
        }
        else{
                printf("Hello World");
        }
        return 0;
}
4

1 回答 1

6

我认为你误解了这个概念。fork() 克隆进程,这意味着父进程和子进程都被执行,并且它们的代码中都有相同的 if-else(因为它们从fork()下往上运行相同的代码)。

子进程ID为0所以进入if,父进程ID不为0所以进入else。这是一种让进程各自做自己的事情的方法,即使它们具有相同的代码。

于 2013-02-22T23:31:50.470 回答