2016-03-15 57 views
0

我正在浏览这个问题,并决定自己实施这个程序。我STRACE输出的澄清

Interpreting STRACE output - pipes and forks

的strace的输出是不同的:

execve("./fork", ["./fork"], [/* 61 vars */]) = 0 
arch_prctl(ARCH_SET_FS, 0x173f880)  = 0 
pipe([3, 4])       = 0 
clone(child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x173fb50) = 2968 
execve("/usr/bin/wc", ["wc", "-l"], [/* 61 vars */]) = 0 
arch_prctl(ARCH_SET_FS, 0x7f4a4738e740) = 0 
Process 2968 attached 
[pid 2968] execve("/bin/ls", ["ls"], [/* 61 vars */]) = 0 
[pid 2968] arch_prctl(ARCH_SET_FS, 0x7f1954bd0840) = 0 
[pid 2968] exit_group(0)    = ? 
5 
[pid 2967] exit_group(0)    = ? 
[pid 2967] +++ exited with 0 +++ 
+++ exited with 0 +++ 

你能解释这是为什么输出不同?它是否做同样的事情?

非常感谢。

回答

1

当您处理多个进程时,事情会因设计而异 - 不能保证父或子将以任何顺序执行。没有输出是错误的。

在你的情况下,它看起来像父母管理在孩子运行之前执行更多的系统调用。在引用的线程中,孩子执行得更快。