我有一个正在运行的进程,它正在创建一个文件
clean_db () {
while read i
do
Some_long_process >> output.txt
done < input_db
我希望其他进程运行并计算创建的行数,效果很好
while true
do
wc -l output.txt | awk '{ print $1 }'
sleep 5
done
}
但是当第一个进程结束时,我无法停止第二个进程,即使第一个进程结束,第二个进程也会继续工作。如何将第二个链接到第一个以在第一个结束时停止它?
答案1
将第二个函数作为后台子进程启动,然后在退出shell脚本时杀死所有子进程:
second_process () {
while true
do
wc -l output.txt
sleep 1
done
}
clean_db () {
second_process &
for i in $(seq 5);
do
echo "kfjdjkfdf" >> output.txt
echo "Done adding" $i
sleep 1
done
}
clean_db
pkill -P $$
请注意,这pkill -P $$
会杀死所有子进程。
答案2
最终完整的解决方案如下:
Check_process () {
while true
do
wc -l output.txt | awk '{ print $1 }'
sleep 5
done
}
clean_db () {
# The following sets build in bash trap for Ctrl+C and kills background process when Ctrl+C is detected
trap 'kill $BGPID; exit' INT
Check_process &
BGPID=$!
while read i
do
Some_long_process >> output.txt
done < input_db
}
clean_db