澄清STRACE输出

时间:2016-03-15 16:02:40

标签: c linux pipe fork 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 个答案:

答案 0 :(得分:1)

当您处理多个流程时,设计会产生一些问题 - 不能保证父或子将以任何顺序执行。输出都不对。

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