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

Does `strace -f` work differently when run inside a docker container?

假设如下:

我看到的是 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

我认为正在发生的事情是 运行ning inside docker 使进程处理和安全性不同。

我的问题是:当 运行 在 docker 容器中时,strace -f 的工作方式是否不同?

请注意,此应用程序在 2 秒内启动和停止 - 因此跟踪工具必须遵循应用程序生命周期 - 就像 strace 一样。连接到服务器后台进程将不起作用。

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

strace -s 800 -ff  ./myprogram

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

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