Работает ли `strace -f` по-разному при запуске внутри контейнера Docker?

Предположим следующее:

  • У меня есть программа myprogram внутри докера
  • Я запускаю контейнер докера с

    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,

Я думаю, что то, что происходит внутри докера, делает процесс обработки и безопасность разными.

Мой вопрос: strace -fработать по-другому при запуске внутри контейнера докера?

Обратите внимание, что это приложение запускается и останавливается через 2 секунды - поэтому инструмент трассировки должен следовать жизненному циклу приложения - как strace делает. Подключение к серверу фоновый процесс не будет работать.

1 ответ

Решение

Оказывается strace обрезает вывод строки - вы должны явно указать ей, что вы хотите больше, чем первые n (10?) строковых символов. Вы делаете это с -s 800,

strace -s 800 -ff  ./myprogram

Вы также можете получить все write команды, спрашивая strace явно с -e write,

strace -s 800 -ff -e write  ./myprogram
Другие вопросы по тегам