当第二个存在时退出管道中的第一个进程

时间:2014-03-26 21:34:43

标签: shell pipe exit

shbash上,当第二个进程退出时,如何退出管道中的第一个进程?

我使用以下内容从网络获取输入:

$ nc -l 1234 | myprog

myprog由于内部原因退出,但nc继续存在。是否可以停止nc

1 个答案:

答案 0 :(得分:1)

在bash中,您可以使用& 控制操作符进行分叉处理,并获取孩子阅读 $!的pid。所以,最简单的解决方案可能是

$ ( nc -l 1234 & echo $! > /tmp/myprog_kill_pid ) | myprog; kill $(</tmp/myprog_kill_pid); rm /tmp/myprog_kill_pid

当然,这不是很好,不适合多个正在运行的实例......但你可以从这开始。