在终端中输入会干扰在后台运行的“nc”吗?

在终端中输入会干扰在后台运行的“nc”吗?

我可以运行这两个命令:

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

使用“a”(来自不同终端)填充时,所有操作均按预期进行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

答案1

netcat 是双向的。它复制将套接字连接到 stdout,以及从 stdin 读取套接字。当您按下某个键时,它会注意到 stdin(tty)上有可用数据并尝试读取它。后台作业不允许从 tty 读取,因此它会被暂停。

如果您不打算在套接字上发送任何数据,则应将其添加</dev/null到您的 netcat 命令中。

jobs当作业改变状态时,命令添加或删除“与”符号是正常的。

相关内容