stdout(またはstderr)への書き込みをキャプチャしようとしていますが、実際のデータは終了イベントに関連しているようです。私はstdoutとstderrに書く単純なCプログラムを書いた。
#include <stdio.h>
int
main()
{
printf("Standard output\n");
fprintf(stderr, "Standard error\n");
return 0;
}
"gcc example.c -o example"でコンパイルしました。今sysdigを起動すると
sudo sysdig --unbuffered -X syscall.type=write and proc.name=example
./example を実行すると、次の出力が表示されます。
91612 20:12:09.273696708 2 example (12909) > write fd=1(<f>/dev/pts/1) size=16
91613 20:12:09.273726879 2 example (12909) > write fd=2(<f>/dev/pts/1) size=15
データは表示されず、入力イベント(>)のみが表示されます。また、stdout chiselは出力を生成しません。
sudo sysdig --unbuffered -X -c stdout syscall.type=write and proc.name=example
問題は私のサンプルプログラムにありますか、それとも別の場所にありますか?引数なしでsysdigを実行すると、特定のプロセスの終了イベントも表示されることがあります。
私はUbuntu 20.04ディストリビューションを実行しており、sysdigのバージョンは0.26.4です。 sysdig の詳細については、次を参照してください。sysdig GitHubリポジトリ。
ベストアンサー1
明らかに、Ubuntuに付属のバージョンにはいくつかの問題があります。 sysdigのWebサイトから最新バージョン(0.27.1)をダウンロードしましたが、結果は正しいです。
65099 19:55:54.695520567 7 example (10805) > write fd=1(<f>/dev/pts/0) size=16
65102 19:55:54.695526434 7 example (10805) < write res=16 data=
0x0000: 5374 616e 6461 7264 206f 7574 7075 740a Standard output.
65103 19:55:54.695528110 7 example (10805) > write fd=2(<f>/dev/pts/0) size=15
65104 19:55:54.695529507 7 example (10805) < write res=15 data=
0x0000: 5374 616e 6461 7264 2065 7272 6f72 0a Standard error.