[英]Terminating piped subprocesses in bash on ctrl+c
假設我有兩個文本文件,例如file1.txt
和file2.txt
,它們在如下所示的腳本中聚合到單個流中:
#!/bin/bash
cat <( cat file1.txt | while read line; do sleep 1 && echo "first: $line" | tail -n +1; done & cat file2.txt | while read line; do sleep 1 && echo "second: $line" | tail -n +1; done)
如果在內部cat
子進程完成之前按下ctrl+c
則在腳本終止時它們將在后台運行。 我如何修改此腳本,以便在使用ctrl+c
關閉腳本時終止所有內部子進程(兩個cat
操作)?
編輯:如果可能,我不想使用循環。
我通過做得到工作(歡迎評論):
#!/bin/bash
trap kill_subprocesses INT
PID=`echo $$`
tempfile="temp.${PID}"
touch ${tempfile}
function kill_subprocesses {
while read p; do
kill "$p" || kill -2 "$p" || kill -9 "$p"
done < "$tempfile"
rm ${tempfile}
}
cat <( cat file1.txt | while read line; do sleep 1 && echo "first: $line" | tail -n +1; done & echo $! >> ${tempfile}; cat file2.txt | while read line; do sleep 1 && echo "second: $line" | tail -n +1; done & echo $! >> ${tempfile};)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.