假设如下:
myprogram
我正在使用
运行docker容器 docker run --privileged=true my-label/my-container
在容器内部 - 程序正在运行:
strace -f -e trace=desc ./myprogram
我看到的是strace
(尽管-f
开启)并未遵循所有子进程。
我看到strace
[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>
我想看到的是其他write
命令。
现在我应该看到其他write
命令 - 因为我正在使用-f
。
我认为发生的事情是在docker中运行会使进程处理和安全性不同。
我的问题是:在Docker容器内运行时,strace -f
的工作方式是否有所不同?
请注意,此应用程序在2秒内启动和停止 - 因此跟踪工具必须遵循应用程序生命周期 - 如strace
所做的那样。连接到服务器后台进程将不起作用。
答案 0 :(得分:0)
事实证明strace
截断了字符串输出 - 你必须明确告诉它你想要的不仅仅是前n(10?)个字符串字符。您可以使用-s 800
执行此操作。
strace -s 800 -ff ./myprogram
您还可以通过write
明确询问strace
来获取所有-e write
个命令。
strace -s 800 -ff -e write ./myprogram