在docker容器中运行时,`strace -f`的工作方式是否有所不同?

时间:2018-01-27 10:12:28

标签: docker process strace

假设如下:

  • 我在docker容器中有一个程序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所做的那样。连接到服务器后台进程将不起作用。

1 个答案:

答案 0 :(得分:0)

事实证明strace截断了字符串输出 - 你必须明确告诉它你想要的不仅仅是前n(10?)个字符串字符。您可以使用-s 800执行此操作。

strace -s 800 -ff  ./myprogram

您还可以通过write明确询问strace来获取所有-e write个命令。

strace -s 800 -ff -e write  ./myprogram