Назад | Перейти на главную страницу

Запись в stdin запущенного процесса с тем же эффектом / поведением, что и прямая запись

это Почта отвечает лишь частично на мой вопрос. Моя проблема в том, что запись в stdin запущенного процесса с использованием FD процесса в файловой системе / proc не имеет такого же эффекта.

Проблема:

  1. запустить nc для прослушивания порта 10000 (далее этот процесс называется nc 1)

    nc -l 10000
    
  2. запустить другой NC для отправки символов прослушивающему NC (это будет NC 2)

    nc localhost 10000
    
  3. Напишите в stdin на NC 2

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

проблема: "некоторые символы здесь" не попадают в прослушиваемый nc (nc 1), НО отображаются на консоли nc 2.

Вопрос: почему и можно ли заставить это работать?

Это не работает так, как вы ожидаете, потому что /proc/<PID>/fd/0 не труба. Если вы вызываете отправляющую сторону с подключенным к каналу стандартным вводом, она будет работать

На принимающем хосте

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 и соединение преждевременно закрывается. Чтобы закрыть соединение, вам нужно убить процесс cat, который держит FIFO открытым.

Как указано в ответе на сообщение, которое вы связали, вам нужно написать /proc/pid/fd/0не /proc/pid/fd/1.