我正在运行这个命令:
strace -f -e trace=desc ./my-program
(所以你看到我正在运行-f
参数)
write
这让我看到了父进程的 stdout/stderr命令:
[pid 10] 07:36:46.668931 write(2, "..\n"..., 454 <unfinished ...>
<stdout of ..>
<stdout other output - but I don't see the write commands - so probably from a child process>
[pid 10] 07:36:46.669684 write(2, "My final output\n", 24 <unfinished ...>
<stdout of My final output>
我想看到的是其他写命令。
这是在一个正在执行的 docker 容器中运行的:
docker run --privileged=true my-label/my-container
我的问题是:如何从 docker 容器内的所有子进程中跟踪所有写调用(到 stdout/stderr)?
编辑:请注意,此应用程序在大约 2 秒内启动和停止。strace
可以遵循其应用周期。但是期望它像服务器进程一样徘徊的工具将无法工作。(也许sysdig
可以用于这个 - 但我还没有看到这个模型的例子)。
事实证明会
strace
截断字符串输出 - 你必须明确告诉它你想要的不仅仅是前 n (10?)个字符串字符。你用-s 800
.您还可以通过使用 明确
write
询问来获取所有命令。strace
-e write