2017-09-29 207 views
0

我想通過設置該通信的只讀終端窗口來理想地調試兩個進程之間的問題。這是我可以簡單地使用現有的標準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。它應該像套接字一樣對待它,在這種情況下,行爲將被讀取直到EOF。 – bnaecker

回答

0

有多種選擇如何監控。我希望你有兩個過程。一個過程是寫給FIFO,另一個是閱讀。

如果您需要單獨調試讀寫器,您可以使用像cat這樣的簡單程序。

writer-process 

# and in another terminal 
cat /run/myfifo 

reader-process & 

# and in another terminal 
cat > /run/myfifo 

當你需要調試作者和讀者一起,你可以使用strace丹尼爾Schepler建議。 strace可以和你的程序一起運行,在這種情況下,日誌輸出被重定向到另一個終端/dev/pts/4

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

該命令記錄來自所有文件描述符的所有讀取調用。如果只想過濾從管道讀取數據,則必須標識fifo文件描述符並grep輸出。

如果strace不是一個選項,您可以強制讀寫器使用不同的fifo名稱,然後將這兩個fifo連接到記錄傳輸數據的程序中。這樣的連接器的最簡單的變體可以像

cat < /run/mywritefifo | tee /dev/tty > /run/myreadfifo