Sysdig は、書き込みシステムコールの終了イベントを表示しません。

Sysdig は、書き込みシステムコールの終了イベントを表示しません。

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.

おすすめ記事