在終端機中輸入會幹擾後台運作的「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 &

另請注意,它失去了“背景”& 符號。不知道從哪裡開始調試。這是預期的行為嗎?謝謝。

Mac OSX 10.9、GNU Bash 3.2.52

答案1

netcat 是雙向的。它複製到標準輸出的套接字,以及來自標準輸入的套接字。當您按下某個按鍵時,它會注意到 stdin(tty)上有可用資料並嘗試讀取它。後台作業不允許從 tty 讀取,因此它會被掛起。

如果您不打算在套接字上發送任何數據,則應該將其添加</dev/null到 netcat 命令中。

jobs當作業更改狀態時,命令新增或刪除 & 符號是正常的。

相關內容