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

Geo*_*Geo 8 linux stdin

这篇文章只回答了我的部分问题。我的问题是,使用 /proc 文件系统上的进程的 FD 写入正在运行的进程的 stdin 不会产生相同的效果。

问题:

  1. 启动 nc 侦听端口 10000(此过程进一步称为 nc 1)

    nc -l 10000
    
    Run Code Online (Sandbox Code Playgroud)
  2. 启动另一个 nc 向监听 nc 发送字符(这将是 nc 2)

    nc localhost 10000
    
    Run Code Online (Sandbox Code Playgroud)
  3. 写入 nc 2 上的标准输入

    echo "some chars here" >> /proc/[PID-nc-2]/fd/0
    
    Run Code Online (Sandbox Code Playgroud)

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

问题:为什么以及是否有可能使它起作用?

use*_*517 11

这不像您期望的那样工作,因为/proc/<PID>/fd/0它不是管道。如果您调用发送端并将其标准输入连接到管道,它将起作用

在接收主机上

nc -l 10000
Run Code Online (Sandbox Code Playgroud)

在发送主机上

mkfifo my.fifo
cat >my.fifo &
cat my.fifo | nc remotehost.tld 10000
Run Code Online (Sandbox Code Playgroud)

现在你可以

echo "Hello World" >my.fifo
myprog >my.fifo
Run Code Online (Sandbox Code Playgroud)

请注意,cat >my.fifo需要保持 fifo 打开,否则会发送 EOF 并且连接过早关闭。要关闭连接,您需要终止保持 fifo 打开的 cat 进程。


Mic*_*ton 1

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