一个命令的输出通过管道传输到另一命令;如何关闭两者?

一个命令的输出通过管道传输到另一命令;如何关闭两者?

我按照建议调用 Qt Assistant堆栈溢出:

nc -lkU ~/.assistantfifo | assistant -enableRemoteControl &

Qt Assistant 窗口打开,如果我调用jobs,它返回:

[1]  + running    nc -lkU ~/.assistantfifo | assistant -enableRemoteControl

然后,我关闭 Qt Assistant(只需单击“x”)。现在,jobs返回:

[1]  + running    nc -lkU ~/.assistantfifo | 
       done       assistant -enableRemoteControl

所以,nc继续工作,我必须输入killall nc

nc当我关闭Qt Assistant时,如何完成?或者,也许我应该采取不同的做法?

答案1

您正在运行的命令(nc又名netcat)将在使用该标志运行时监听输入-l。通常,侦听模式下的 netcat 在收到文件结束字符时将关闭,但该-k标志阻止了这种情况。换句话说,由于调用命令的方式,netcat 在您将其杀死之前不会关闭。

请参阅手册页了解更多信息。

答案2

如果你想分离第二个进程,你还需要将它们分组为

$ ( nc -lkU ~/.assistantfifo | assistant -enableRemoteControl ) &

否则它不会工作。需要使用大括号来分离这两个过程。

相关内容