Linux – Write to the stdin of a running process with the same effect/behaviour of directly writing

linuxstdin

This post answers only partial my question. My problem is that writing to the stdin of the running process using the FD of process on the /proc filesystem does not have the same effect.

Problem:

  1. start nc to listen on port 10000 (this process is called further nc 1)

    nc -l 10000
    
  2. start another nc to send chars to the listening nc (this will be nc 2)

    nc localhost 10000
    
  3. Write to the stdin on the nc 2

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

the problem: "some chars here" do not get to the listening nc (nc 1), BUT are shown on the console of the nc 2.

Question:
why and is it possible to make this working?

Best Answer

This doesn't work as you expect because /proc/<PID>/fd/0 isn't a pipe. If you invoke the sending side with it's stdin connected to a pipe it will work

On the receiving host

nc -l 10000

On the sending host

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

Now you can

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

Note that the cat >my.fifo is required to keep the fifo open otherwise an EOF gets sent and the connection gets closed prematurely. To close the connection down you need to kill the cat process that is holding the fifo open.