【问题标题】:Why strace -f can't trace the child progress after |?为什么 strace -f 无法跟踪 | 之后的孩子进度?
【发布时间】:2016-10-09 21:50:42
【问题描述】:

我想看看当我运行一个命令时系统调用会发生什么,但似乎那些命令在 | 之后不能显示?喜欢:

strace -f cat a.txt| cat

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

【问题讨论】:

    标签: linux shell terminal system-calls strace


    【解决方案1】:

    来自strace 手册(重点是我的)。

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

    在您的情况下,跟踪的进程是第一个 cat 进程。第二个cat 进程不是第一个cat 进程的子进程。分叉是由shell完成的。

    实现您想要的一种方法是跟踪外壳:

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

    【讨论】:

    • 抱歉,我应该使用cat 而不是cats。 (您可以更新它以使您的答案完美)现在我使用您的句子(将猫替换为猫)。我在输出中仍然看不到 fork() 命令,你知道为什么吗?
    • bash shell 使用clone 而不是fork。而是寻找那个。
    • 哦,你太棒了!
    猜你喜欢
    • 2011-05-02
    • 2017-02-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多