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

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

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

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

Все работает как положено с output.txt заполнение буквой "а" (с другого терминала). Но если ввести один символ в терминал, выполняющий фоновые задания, отправка 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

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

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

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