这篇文章只回答了我的部分问题。 我的问题是,在/ proc文件系统上使用进程的FD写入正在运行的进程的标准input并不具有相同的效果。
问题:
启动nc在端口10000上侦听(这个过程被称为进一步nc 1)
nc -l 10000
开始另一个NC发送字符到侦听NC(这将是NC 2)
nc localhost 10000
写入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 。