2017-09-29 18 views
0

2つのプロセス間の問題をデバッグするには、そのトラフィックの読み取り専用ターミナルウィンドウを設定するのが理想です。これは私が単に既存の標準Linuxユーティリティを使うことができるのでしょうか?FIFOをどのように監視できますか?

FIFOが/run/myfifoに住んでいるとしてプロセスのいずれかで作成されます。

/* Create a FIFO if one doesn't already exist */ 
int createFifo(char *filepath) { 
    if (access(path, F_OK) == -1) { 
    return mkfifo(filepath, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); 
    } 

    return 0; 
} 

tail -F /run/myfifo

+0

プロセスを「strace」して、システムコールのFIFOへの読み書きを除外できますか? –

+0

あなたはいつもFIFOだけを 'cat'することができます。それはソケットのように扱わなければなりません。この場合、動作はEOFまで読み込むことです。 – bnaecker

答えて

0

これを監視する方法はさまざまです。 2つのプロセスがあると思います。 1つのプロセスはFIFOへの書き込みであり、もう1つは読み取りです。

リーダーとライターを別々にデバッグする必要がある場合は、catのような単純なプログラムを使用できます。

writer-process 

# and in another terminal 
cat /run/myfifo 

または

reader-process & 

# and in another terminal 
cat > /run/myfifo 

あなたが一緒にあなたはダニエルScheplerが推奨straceを使用することができ、デバッグライターとリーダーが必要

。 straceはプログラムと一緒に実行することができ、ロギング出力はこの場合は別の端末 /dev/pts/4にリダイレクトされます。

strace -e read -s 999 reader-process 2> /dev/pts/4 

このコマンドは、すべてのファイル記述子からのすべての読み取り呼び出しを記録します。パイプからの読み取りのみをフィルタリングする場合は、fifoファイル記述子を識別し、出力をgrepする必要があります。

オプションではない場合、リーダーとライターが異なるFIFO名を使用するように強制し、転送されたデータを記録するプログラムでこれらの2つのFIFOを接続することができます。このようなコネクタの最も単純な変形例は、次のようなスクリプトにすることができます

cat < /run/mywritefifo | tee /dev/tty > /run/myreadfifo 
関連する問題