假设我有两个文本文件,例如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)
如果在内部ctrl+c
子进程完成之前按下cat
,则在脚本终止时它们将在后台运行。如何修改此脚本,以便在使用cat
关闭脚本时终止所有内部子进程(两个ctrl+c
操作)?
编辑:如果可能,我不想使用循环。
答案 0 :(得分:0)
我开始工作(欢迎评论):
#!/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};)