Ввод текста в терминале мешает работе `nc` в фоновом режиме?

Ввод текста в терминале мешает работе `nc` в фоновом режиме?

Я могу выполнить эти две команды:

nc -l localhost 8888 -v >> output.txt &
(while true;do sleep 1;echo a;done)|nc localhost 8888 &

Все работает как и ожидалось с output.txtзаполнением "a"s (хвостом с другого терминала). Но если ввести один символ в терминал, выполняющий фоновые задания, отправка ncпревращается из Runningв Stopped:

$ jobs
[1]+  Stopped                 nc -l localhost 8888 -v >> output.txt
[2]-  Running                 ( while true; do
    sleep 1; echo a;
done ) | nc localhost 8888 &

Также обратите внимание, что он теряет свой "фоновый" амперсанд. Не знаю, с чего начать отладку этого. Это ожидаемое поведение? Спасибо.

Mac OSX 10.9, GNU Bash 3.2.52

решение1

netcat двунаправленный. Он копируетотсокет на стандартный вывод, иксокет из stdin. Когда вы нажимаете клавишу, он замечает, что данные доступны на stdin (tty) и пытается их прочитать. Фоновым заданиям не разрешено читать из tty, поэтому он приостанавливается.

Если вы не собираетесь отправлять какие-либо данные через сокет, вам следует добавить </dev/nullв команду netcat.

И это нормально, когда jobsкоманда добавляет или удаляет амперсанд, когда меняется состояние задания.

Связанный контент