Запись в стандартный поток запущенного процесса с тем же эффектом / поведением прямой записи
Этот пост отвечает только частично на мой вопрос. Моя проблема в том, что запись в stdin запущенного процесса с использованием FD процесса в файловой системе /proc не дает такого же эффекта.
Проблема:
запустите nc для прослушивания порта 10000 (этот процесс называется далее nc 1)
nc -l 10000
запустить другой nc для отправки символов в nc прослушивания (это будет nc 2)
nc localhost 10000
Пиши в стандартный ввод на нк 2
echo "some chars here" >> /proc/[PID-nc-2]/fd/0
проблема: "некоторые символы здесь" не попадают в прослушивающий nc (nc 1), НО отображаются на консоли nc 2.
Вопрос: почему и можно ли заставить это работать?
2 ответа
Это не работает, как вы ожидаете, потому что /proc/<PID>/fd/0
не труба Если вы вызываете отправляющую сторону с подключенным к каналу stdin, она будет работать
На принимающем хосте
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
,