2016-10-09 44 views
0

我想看看当我运行一个命令时系统调用会发生什么,但似乎这些命令后|无法显示?例如:为什么strace -f无法追踪| |后面的孩子进展?

strace -f cat a.txt| cat 

看起来好像很紧张,-f周长可以显示整个过程。我认为最后一部分是由fork创建的子进程。为什么以及如何做到这一点?

回答

1

strace手册(重点是我的)。

-f跟踪子进程,因为它们是由 当前跟踪的过程创建为叉(2), 的vfork(2)和克隆(2)系统调用的结果。

您案例中的追踪过程是第一个cat过程。第二个cat进程是而不是第一个子进程cat。叉由壳完成。

一个达到你想要什么样的方式是跟踪壳:

strace -f bash -c "cat a.txt| cat" 
+0

对不起,我应该使用'cat'不'cats'。 (你可以更新它,使你的答案完美)现在我用你的句子(用猫替换猫)。我仍然无法在输出中看到fork()命令,你知道为什么吗? – fourth

+0

bash shell使用'clone'而不是'fork'。改为寻找。 – kaylum

+0

哦,你真棒! – fourth