代码之家  ›  专栏  ›  技术社区  ›  jbarlow

如何监视进程和终端之间的通信?

  •  7
  • jbarlow  · 技术社区  · 14 年前

    我有一个由第三方开发的Linux进程,它可以与终端通信。对于调试,我希望看到通信来回进行。

    cat 会做的诀窍(看到一个方向):

        ./third-party-app &
        cat /dev/tty
    

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

    第三方应用程序被硬编码为 /dev/tty

    我发现监视通信的一种方法是将 比如说, /dev/real_tty /开发/测试 取而代之。然后运行:

        cat /dev/real_tty | tee /dev/tty &
    

    …至少让我看看 /开发/实际 ,通过从 /开发/实际 到命名管道 /开发/测试 stdout .

    正确的方法是什么?

    如果有人想知道,TTY设备是一个RS-232连接到微控制器。信息不敏感或不安全。所有进程(应用程序和spie)都可以作为根进程运行。

    7 回复  |  直到 14 年前
        1
  •  1
  •   Andrew    14 年前

    你可以看看 slsnif

        2
  •  3
  •   Aryabhatta Aryabhatta    14 年前

    你考虑过使用 strace/ltrace ? 您可以看到它正在进行的系统调用,特别是可以看到正在进行的write/ioctl etc调用。

        3
  •  2
  •   msw    14 年前

    RS-232 ? 只需用夹子轻触RxD/TxD/GND线路。我已经很久没有见过任何设备关心DCD、DTR等了。

        4
  •  1
  •   karlphillip    14 年前

    有一些替代方案:

    Redirecting Output from a Running Process

    CryoPID 允许您捕获Linux中正在运行的进程的状态并将其保存到文件中。然后,可以使用此文件在重新启动后甚至在另一台计算机上恢复该进程。

    Distributed MultiThreaded CheckPointing 是透明的 跨多台机器,通过插座连接。

        5
  •  1
  •   nategoose    14 年前

    这个 script /dev/tty 通常是特殊的,指的是当前进程的控制终端,因此您可能不必对其进行重命名。

    脚本 指此外壳及其子进程的psudo终端)。c选项允许您运行特定命令而不是shell。

    脚本 ./typescript 默认情况下)是这样的——双向流动的数据被转储到同一个文件中,并且看起来与使用交互终端时屏幕上显示的内容相似(除了包括转义符、回车符和类似的傻乎乎的东西以及正常显示的字符)。

    不管怎样,我知道这个问题早就有答案了,但我认为如果有人要寻找一个类似的解决方案,而不是使用一个真正的串行端口,这可能会帮助他们。

        6
  •  0
  •   iondiode    14 年前
        7
  •  0
  •   asveikau    10 年前

    您还可以编写一个与自己的共享库 write() 写入() libc.so . 然后你可以用 LD_PRELOAD