【问题标题】:Does `strace -f` work differently when run inside a docker container?在 docker 容器中运行时,`strace -f` 的工作方式是否不同?
【发布时间】:2018-01-27 10:12:27
【问题描述】:

假设如下:

  • 我在 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 内部运行会使进程处理和安全性有所不同。

我的问题是:strace -f 在 docker 容器中运行时是否会有所不同?

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

【问题讨论】:

    标签: docker process strace


    【解决方案1】:

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

    strace -s 800 -ff  ./myprogram
    

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

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

    【讨论】:

      猜你喜欢
      • 2023-01-31
      • 1970-01-01
      • 2019-01-15
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      • 2018-03-22
      • 2023-02-06
      • 1970-01-01
      相关资源
      最近更新 更多