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

두 번째 기능을 백그라운드 하위 프로세스로 시작한 다음, 쉘 스크립트를 종료할 때 모든 하위 프로세스를 종료합니다.

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

관련 정보