Digitar no terminal interfere na execução do `nc` em segundo plano?

Digitar no terminal interfere na execução do `nc` em segundo plano?

Posso executar estes dois comandos:

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

Tudo funciona conforme o esperado com output.txtpreenchimento de "a"s (caudal de terminal diferente). Mas se digitar um único caractere no terminal que executa os trabalhos em segundo plano, o envio ncpassa de Runningpara Stopped:

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

Observe também que ele perde seu e comercial de "fundo". Não sei por onde começar a depurar isso. Esse é o comportamento esperado? Obrigado.

Mac OSX 10.9, GNU Bash 3.2.52

Responder1

netcat é bidirecional. Ele copiadeo soquete para stdout eparao soquete do stdin. Ao pressionar uma tecla, ele percebe que há dados disponíveis no stdin (o tty) e tenta lê-los. Os trabalhos em segundo plano não têm permissão para ler o tty, portanto ele é suspenso.

Se você não pretende enviar nenhum dado no soquete, você deve adicionar </dev/nullao seu comando netcat.

E é normal que o jobscomando adicione ou remova o e comercial quando um trabalho muda de estado.

informação relacionada