파일을 생성하는 프로세스가 실행 중입니다.
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
두 번째 기능을 백그라운드 하위 프로세스로 시작한 다음, 쉘 스크립트를 종료할 때 모든 하위 프로세스를 종료합니다.
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