在sh
或bash
上,当第二个进程退出时,如何退出管道中的第一个进程?
我使用以下内容从网络获取输入:
$ nc -l 1234 | myprog
myprog
由于内部原因退出,但nc
继续存在。是否可以停止nc
?
答案 0 :(得分:1)
在bash中,您可以使用& 控制操作符进行分叉处理,并获取孩子阅读 $!的pid。所以,最简单的解决方案可能是
$ ( nc -l 1234 & echo $! > /tmp/myprog_kill_pid ) | myprog; kill $(</tmp/myprog_kill_pid); rm /tmp/myprog_kill_pid
当然,这不是很好,不适合多个正在运行的实例......但你可以从这开始。