写入正在运行的进程的stdin,具有与直接写入相同的效果/行为

这篇文章只回答了我的部分问题。 我的问题是,在/ proc文件系统上使用进程的FD写入正在运行的进程的标准input并不具有相同的效果。

问题:

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

    nc -l 10000 
  2. 开始另一个NC发送字符到侦听NC(这将是NC 2)

     nc localhost 10000 
  3. 写入nc 2的stdin

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

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

问题:为什么能做到这一点?

这不符合你的期望,因为/proc/<PID>/fd/0不是pipe道。 如果你调用发送端的stdin连接到pipe道,它将工作

在接收主机上

 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并且连接过早closures。 要closures连接,你需要杀死持有FIFO打开的猫进程。

正如您链接的post的回答中所述,您需要写入/proc/pid/fd/0 ,而不是/proc/pid/fd/1