写入正在运行的进程的标准输入,其效果/行为与直接写入相同

写入正在运行的进程的标准输入,其效果/行为与直接写入相同

邮政仅回答了我的部分问题。我的问题是,使用 /proc 文件系统上进程的 FD 写入正在运行的进程的标准输入不会产生相同的效果。

问题:

  1. 启动 nc 监听 10000 端口(这个过程进一步称为 nc 1)

    nc -l 10000
    
  2. 启动另一个 nc 来向监听的 nc 发送字符(这将是 nc 2)

    nc localhost 10000
    
  3. 写入 nc 2 上的标准输入

    echo "some chars here" >> /proc/[PID-nc-2]/fd/0
    

问题:“这里的一些字符”没有到达监听 nc(nc 1),但是显示在 nc 2 的控制台上。

问题:为什么?是否有可能实现这一点?

答案1

这不会像你预期的那样工作,因为/proc/<PID>/fd/0这不是管道。如果你调用发送方并将其 stdin 连接到管道,它将工作

在接收主机上

nc -l 10000

在发送主机上

mkfifo my.fifo
cat >my.fifo &
cat my.fifo | nc remotehost.tld 10000

现在你可以

echo "Hello World" >my.fifo
myprog >my.fifo

请注意,cat >my.fifo必须保持 fifo 处于打开状态,否则将发送 EOF 并过早关闭连接。要关闭连接,您需要终止保持 fifo 处于打开状态的 cat 进程。

答案2

正如您链接的帖子的答案中所述,您需要写信给/proc/pid/fd/0,而不是/proc/pid/fd/1

相关内容