BASH - 链接2个进程,当进程1终止时终止进程2

BASH - 链接2个进程,当进程1终止时终止进程2

我有一个正在运行的进程,它正在创建一个文件

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

相关内容