Unix fork()系统调用

问题描述:

好日间全部Unix fork()系统调用

我很困惑fork()。 fork()是否支持子进程或仅支持父进程?

请在一些例子

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

int main() { 
    if (fork()) { 
    fork(); 
    printf(" X\n"); 
    } 
    return 0; 
} 

帮助是这样的我怎么想建立的过程:

parent 
     | 
/ \ 
Parent Child 

所以输出将

X X X 

另一个例子是

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

int main() { 
    fork(); 
    fork(); 
    fork(); 

    printf(" X \n"); 

    return 0; 
} 

图表会是这样吗?

    Fork start 
        / \ 
       Parent Child  1st fork done output 2 of X 
       /\ / \ 
       P  C P C  2nd fork done output 4 of X 
      /\ /\ /\ /\ 
      P C P C P C P C  3rd fork done output 8 of X 

另一个问题我怎么能画

if (fork() || fork() || fork()) 
    fork(); 

if (fork() && fork()) 
    fork(); 

如果有人纠正我,我会很高兴。

+0

我不明白你的图纸,我不明白你的问题。一个成功的'fork()'系统调用可以更好地理解为调用它的过程的魔法克隆。 – 2012-01-02 17:05:22

+0

fork创建父项和子项的过程,对吗? 像pid == 0为孩子和pid> 0为父 所以当我分叉() 和打印X和打印为孩子和父母 – mydreamadsl 2012-01-02 17:07:13

+2

问题是什么? – 2012-01-02 17:07:41

fork没有“创建父母和子女的过程”,没有。它创建当前进程的副本(副本是子进程,当前进程是父进程)。区别是基于fork返回值完成的。

+0

fork(); fork()是2个进程的副本,对不对?那么fork(); fork(); fork()是4个复制过程的副本吗? – mydreamadsl 2012-01-02 17:16:11

+0

阅读http://en.wikipedia.org/wiki/Fork_%28operating_system%29 – 2012-01-02 17:16:52

+0

@ user1098207 - ** no **。 – littleadv 2012-01-02 17:18:18