我可以修改特定进程的stdin描述符吗?

时间:2016-02-02 22:45:03

标签: linux process file-descriptor

以下是该方案:

我开了3个终端:term1,term2,term3。 term1的PID是6549。

ps -fp 6549

给出:

bc        6549  3642  0 11:07 pts/8   00:00:00 bash

现在,在终端2上我输入了

tail -f /proc/6549/fd/0

到目前为止没有任何事情发生,但是好吧,总而言之,过程6549正在处理任何事情。 现在在terminal3上执行:

echo "any kind of text" | write $USER pts/8

只是发送文字。 terminal1上的输出正常,但尾部描述符上没有任何内容。是否可以看到过程6549执行的数据输入? 6549如何使用/ proc / 6549 / fd目录下的文件?

编辑: 关于stdout的相同:我看不到尾部的任何输出,带有上述PID的终端上的输出都可以。

2 个答案:

答案 0 :(得分:1)

从终端读取终端键盘输入(真实或虚拟)。写入终端会将输出写入终端的屏幕。

您正在做的是写入终端的屏幕并期望输出作为键盘输入循环而不是显示:

Illustration showing that data written to a terminal does not loop back as keyboard input

答案是否定的,你不能这样做。如果您想在多个进程可以提供输入的终端会话中运行程序,请使用支持此类屏幕共享的screentmux工具。

答案 1 :(得分:0)

  

是否可以看到通过流程6549传递的数据输入?

是的,是的。

"1"*n

传递给进程6549执行的数据包含在上述命令的输出中。