我正在运行这个命令:
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
可以用于此 - 但我还没有看到此模型的示例)。
答案1
事实证明strace
截断了字符串输出 - 你必须明确地告诉它你想要的不仅仅是前 n (10?) 个字符串字符。你用 来执行此操作-s 800
。
strace -s 800 -ff ./myprogram
您还可以write
通过使用strace
明确询问来获取所有命令-e write
。
strace -s 800 -ff -e write ./myprogram