两个fork()调用?

时间:2013-10-12 11:41:10

标签: process system-calls fork

我知道如果父母接收到child_id后我会调用fork(),而孩子会收到0,如果是1则意味着失败。

我的问题是,如果我有两个fork()来电,如何区分child1和child2以及父母?

我想:

fork1_id <0 || fork2_id < 0  >> fail
fork2_id==0   >> child2
fork1_id==fork2_id  >> child1 
else  >> parent

2 个答案:

答案 0 :(得分:2)

  

我的问题是,如果我有两个fork()调用,如何区分child1和child2以及parent?

您需要发布实际代码,因为它的含义模糊不清。如果你的字面意思是:

fork()
fork()

然后你必须区分:

Parent -> Child1 -> Grandchild
       -> Child2

自从第一个分叉后,第一个孩子将分叉一个孙子。

或者,你可能意味着第二个分叉只在父代中。在任何情况下,您都可以用与第一个分叉相同的方式区分第二个分叉的父代和子代。

答案 1 :(得分:1)

这是我的代码;我需要在第一个之后调用另一个fork,然后根据if_conditions:print我是child_1进程或者我是child_2进程或者我是父进程...希望现在很清楚;

int main()
{
pid_t childpid; 

childpid = fork();


    if (childpid == 0) 
    {
        printf("I am the child process!\n");

    }
    else if(childpid > 0) 
    {
        printf("I am the parent process!\n");
    }

else 
{
    perror("fork"); /* display error message */

}
return 0;
}