![터미널에 입력하면 백그라운드에서 실행되는 'nc'가 방해를 받나요?](https://rvso.com/image/668804/%ED%84%B0%EB%AF%B8%EB%84%90%EC%97%90%20%EC%9E%85%EB%A0%A5%ED%95%98%EB%A9%B4%20%EB%B0%B1%EA%B7%B8%EB%9D%BC%EC%9A%B4%EB%93%9C%EC%97%90%EC%84%9C%20%EC%8B%A4%ED%96%89%EB%90%98%EB%8A%94%20'nc'%EA%B0%80%20%EB%B0%A9%ED%95%B4%EB%A5%BC%20%EB%B0%9B%EB%82%98%EC%9A%94%3F.png)
다음 두 가지 명령을 실행할 수 있습니다.
nc -l localhost 8888 -v >> output.txt &
(while true;do sleep 1;echo a;done)|nc localhost 8888 &
output.txt
"a"(다른 터미널에서 꼬리가 지정됨)로 채워지면 모든 것이 예상대로 작동합니다 . 그러나 백그라운드 작업을 실행하는 터미널에 단일 문자를 입력하면 전송이 다음으로 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 &
또한 "백그라운드" 앰퍼샌드가 느슨해집니다. 디버깅을 어디서 시작해야 할지 모르겠습니다. 이것이 예상되는 동작입니까? 감사해요.
맥 OSX 10.9, GNU 배시 3.2.52
답변1
netcat은 양방향입니다. 복사합니다~에서표준 출력에 대한 소켓, 그리고에게stdin의 소켓. 키를 누르면 stdin(tty)에 데이터가 있음을 인식하고 해당 데이터를 읽으려고 시도합니다. 백그라운드 작업은 tty에서 읽을 수 없으므로 일시 중지됩니다.
소켓에 데이터를 보내지 않으려면 </dev/null
netcat 명령에 추가해야 합니다.
jobs
그리고 작업 상태가 변경될 때 명령이 앰퍼샌드를 추가하거나 제거하는 것은 일반적입니다 .