Fork - 父和子如何运行,即使它是if else

mar*_*iel -2 c unix fork

问题A:

鉴于下面的代码,我理解当你调用一个fork时,大多数情况下,如果它的资源被传递给子进程.现在,我所查找的几乎所有Fork示例都设置得像我所拥有的那样.从它的外观来看,我不明白如何调用父进程,因为它在else块中.

问题B:

执行子进程中的代码后,它是否自动知道它现在必须进入父进程?我在其他示例中也看到了等待(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;
}
Run Code Online (Sandbox Code Playgroud)

Tim*_*Tim 6

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

子进程ID为0,因此它将输入if,父进程ID不为0,因此它将进入else.这是一种让每个进程都做自己的事情的方法,即使它们具有相同的代码.