2016-03-04 28 views
0

我想知道如何forkwaitexit彼此沟通。什么通过&nexit(0)返回到父进程?系统在以下程序工作中如何调用?

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

int main(void){ 

    int n=5; 
    fork(); 
    wait(&n); 
    printf("%d\n", n); 
    exit(0); 
} 

我得到的输出是

sh-4.3$ main 
5 
0 
sh-4.3$ 
+3

每个人的手册都会给你所有你需要的细节。 –

+0

我想通过一个程序来获得清晰的概念(例子)。它有助于我更好地理解事物。请你解释一下吗? – vish22

+0

'wait(2)'manpage有一个非常广泛的例子,它包括'fork'。请参阅http://linux.die.net/man/2/wait –

回答

0

您可以找到有关手册页,forkwaitexit这些功能。

对于叉我会查找usage examples然而,因为它是一种很复杂的解释。

+0

这应该是一个评论 – Nik

1

fork()创建一个新的进程,几乎是进行调用的那个进程的确切副本。新创建的过程称为孩子。谨防确切的复制是一个强有力的假设!这实际上意味着新创建的流程正处于其父级确切状态下的创建时间(这是一个稍微粗略的假设,但为了简单起见,请按照原样)。然后一个进程打电话给fork,然后两个进程从调用中返回! fork是一种克隆机器(一只羊进入,然后两只机器退出!)。通常你应该测试返回的值fork(详见man)。

然后从现在开始两个进程独立运行!

一个打电话给wait,而另一个自己也打电话。 wait的效果在两者中都不相同。对于原始流程,wait将等待孩子终止,然后捕获有关该事件的信息。孩子呼叫wait,但因为它没有小孩wait什么也不做,并立即返回。然后打印其未变更的变量n的值:5。然后它exit s值0.所以它终止。这将允许父进程从wait调用中唤醒并捕获其子(0)的退出值。然后打印它0exit s。

请注意,此场景的某些变体可能会发生,但这不会改变可观察到的行为,并发运行可能以不同方式运行

+0

感谢您的解释Jean.I有一个怀疑,为什么不父母过程也打印5.我的意思是不应该在输出中有两次两次? – vish22