2016-03-15 63 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

當您處理多個進程時,事情會因設計而異 - 不能保證父或子將以任何順序執行。沒有輸出是錯誤的。

在你的情況下,它看起來像父母管理在孩子運行之前執行更多的系統調用。在引用的線程中,孩子執行得更快。