我正在运行这样的模拟
./waf --run scratch/myfile | awk -f filter.awk
我怎样才能杀死waf
命令尽快filter.awk
检测到发生了某些事情(例如,在读取特定行之后)?
我无法改变waf
or myfile
。我只能改变filter.awk
,以及上面的命令(显然)。
评论后更新:
-
waf
接收后不终止SIGPIPE
(正如它应该?)
- 它会产生需要清理的子进程。
This is 我自己的答案 https://stackoverflow.com/a/14911916/828193 (和挑战).
在研究了@thatotherguy 和@Chris 的答案后,我简化了一些并得到了这个:
tmp=$(mktemp)
{ ./waf --run scratch/myfile & echo $! > "$tmp"; } | { awk -f filter.awk; pkill -P $(<$tmp); kill $(<$tmp); }
不幸的是我无法摆脱tmp
文件,每次尝试通过PID
作为变量失败。
我不会改变已接受的答案(因为它是当时有效的答案)really需要),但对于任何可以简化更多的人来说+1。
Use awk
's exit
陈述。waf
一旦连接到的管道应立即退出awk
closes.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)