为什么strace -f无法在|?

时间:2016-10-09 21:50:43

标签: linux shell terminal system-calls strace

我试图看看当我运行一个命令时系统调用会发生什么,但似乎在|之后的那些命令无法显示?像:

strace -f cat a.txt| cat

似乎strace和-f perimeter可以显示整个过程。我认为最后一部分是由fork创建的子进程。为什么以及如何制作它?

1 个答案:

答案 0 :(得分:2)

来自strace手册(强调我的)。

  

-f跟踪子进程,因为它们是由创建的               由于fork(2),当前跟踪进程,               vfork(2)和clone(2)系统调用。

您的案例中的跟踪流程是第一个cat流程。第二个cat进程是第一个cat进程的子进程。 fork由shell完成。

实现目标的一种方法是跟踪shell:

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