Linux管道破裂,linux – 在管道中杀死上一个命令

我正在运行这样的模拟

./waf --run scratch/myfile | awk -f filter.awk

如果filter.awk检测到发生了某些事情(例如在读取特定行之后),我怎么能杀死waf命令?

我不能改变waf或myfile.我只能更改filter.awk和上面的命令(显然).

评论后更新:

> waf在收到SIGPIPE后没有终止(因为它应该?)

>它产生了需要清理的子进程.

在研究了@theotherguy的ans @ Chris的答案后,我简化了一下并得到了这个:

tmp=$(mktemp)

{ ./waf --run scratch/myfile & echo $! > "$tmp"; } | { awk -f filter.awk; pkill -P $(

不幸的是我无法摆脱tmp文件,每次尝试将PID作为变量传递失败.

我不会改变已接受的答案(因为它是真正需要时才有效的答案),但对于任何可以简化更多的人来说都是1.

解决方法:

是什么让这个棘手的是,当管道断裂时,waf行为不当,它产生了第二个过程,我们也必须摆脱它:

tmp=$(mktemp)

cat "$tmp"; wait) | awk -f filter.awk;

pkill -P $(

kill $(

>我们使用

>我们使用cat作为中介来将数据从此进程中继到awk,因为cat会在管道损坏时正常退出,从而允许管道完成.

>管道完成后,我们会杀死所有已生成的进程(通过父PID)

>最后我们杀了waf本身.

标签:ns-3,bash,linux,awk,waf

来源: https://codeday.me/bug/20190729/1568987.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值