我怎样才能监视进程和终端之间的通信?

jba*_*low 7 linux terminal tty pty embedded-linux

我有一个由第三方开发的Linux进程,它与终端通信.对于调试,我希望看到前面的通信.

有人可能会认为cat这样做(看一个方向):

    ./third-party-app &
    cat /dev/tty
Run Code Online (Sandbox Code Playgroud)

......但事实并非如此.相反,cat将窃取一半用于应用程序的数据,这几乎毫无价值.

第三方应用程序是硬编码的/dev/tty.

我发现监视通信的一种方法是将/dev/tty设备重命名为,例如,/dev/real_tty并创建一个/dev/tty在其位置调用的命名管道.然后运行:

    cat /dev/real_tty | tee /dev/tty &
Run Code Online (Sandbox Code Playgroud)

...至少让我看到输出/dev/real_tty,通过将数据复制/dev/real_tty到命名管道/dev/ttystdout.

这种工作但它感觉非常狡猾,并依赖于替换设备的技巧.它也不能在两个方向上工作,因为命名管道只在一个方向上传输数据.

这样做的正确方法是什么?

如果有人想知道,TTY设备是微控制器的RS-232链接.信息不敏感或不安全.所有进程(应用程序和间谍)都可以以root身份运行.

And*_*rew 1

你可以看看slsnif。它完全符合您的要求,或者如果您有兴趣自己编写一个,可以使用源代码来了解它是如何工作的。