私は次のコマンドを実行しています:
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