2017-09-29 208 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