Dockerコンテナ内のすべての子プロセスに対するすべての書き込み呼び出し(stdout / stderr用)を追跡する方法は?

Dockerコンテナ内のすべての子プロセスに対するすべての書き込み呼び出し(stdout / stderr用)を追跡する方法は?

私は次のコマンドを実行しています:

strace -f -e trace=desc ./my-program

(だから私は-fパラメータを実行していることがわかります)

writeこれにより、親プロセスのstdout / stderrコマンドを表示できます。

[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>

私が見たいのは別の書き込みコマンドです。

これはドッカーコンテナで実行され、次のように実行されます。

docker run --privileged=true my-label/my-container

私の質問は次のとおりですDockerコンテナ内のすべての子プロセスに対するすべての書き込み呼び出し(stdout / stderr用)を追跡する方法は?

編集:このアプリケーションの起動と停止には約2秒かかります。strace適用サイクルに従うことができます。ただし、サーバープロセスのように機能すると予想されるツールは機能しません。 (たぶんsysdigこれに使用されるかもしれませんが、まだこのモデルの例を見たことがありません。)

ベストアンサー1

文字列出力が切り捨てられたことがわかりましたstrace。最初のn(10?)文字列文字以上が必要であることを明示的に知らせる必要があります。あなたはこのようなことをしています-s 800

strace -s 800 -ff  ./myprogram

明示的な要求をwrite使用してすべてのコマンドを取得することもできます。strace-e write

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

おすすめ記事