터미널에 입력하면 백그라운드에서 실행되는 'nc'가 방해를 받나요?

터미널에 입력하면 백그라운드에서 실행되는 'nc'가 방해를 받나요?

다음 두 가지 명령을 실행할 수 있습니다.

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

output.txt"a"(다른 터미널에서 꼬리가 지정됨)로 채워지면 모든 것이 예상대로 작동합니다 . 그러나 백그라운드 작업을 실행하는 터미널에 단일 문자를 입력하면 전송이 다음으로 nc변경됩니다 .RunningStopped

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

또한 "백그라운드" 앰퍼샌드가 느슨해집니다. 디버깅을 어디서 시작해야 할지 모르겠습니다. 이것이 예상되는 동작입니까? 감사해요.

맥 OSX 10.9, GNU 배시 3.2.52

답변1

netcat은 양방향입니다. 복사합니다~에서표준 출력에 대한 소켓, 그리고에게stdin의 소켓. 키를 누르면 stdin(tty)에 데이터가 있음을 인식하고 해당 데이터를 읽으려고 시도합니다. 백그라운드 작업은 tty에서 읽을 수 없으므로 일시 중지됩니다.

소켓에 데이터를 보내지 않으려면 </dev/nullnetcat 명령에 추가해야 합니다.

jobs그리고 작업 상태가 변경될 때 명령이 앰퍼샌드를 추가하거나 제거하는 것은 일반적입니다 .

관련 정보