서브쉘에서 프로세스를 종료하는 방법

서브쉘에서 프로세스를 종료하는 방법

다음과 같은 bash 기능이 있습니다.

listen_to_thing(){

    cat /tmp/srv-output | while read line; do
      echo "catted: $line"
      if [[ "$line" == 'EOF' ]]; then
         exit 0;  ## I want to exit out of the function upon this event
      fi
    done;

}

키워드를 받으면 cat 프로세스를 종료하고 bash 기능을 완료하고 싶습니다. 명령줄에서 SIGINT를 사용하여 bash 기능을 종료할 수 있지만 읽기 루프 내에서 프로그래밍 방식으로 bash 기능을 종료할 수 있는 방법이 있습니까?

답변1

파일이 없습니다 cat. 모든 것이 정상입니다.

listen_to_thing() {
    while read line; do
        echo "read: $line"
        case "$line" in
            EOF) return 0 ;;    # Return out of the function upon this event
        esac
    done </tmp/srv-output
}
  • $line포함된 파일과 방금 종료된 파일을 구별하려면 EOF0이 아닌 상태를 반환하면 됩니다.

답변2

내 테스트에 따르면 이것이 효과가 있다고 생각합니다.

listen_to_thing(){

      (
       export kill_this="$BASHPID"
       cat /tmp/srv-output | while read line; do
          echo "catted: $line"
          if [[ "$line" == 'EOF' ]]; then
             kill -9 "$kill_this"
             exit 0;
          fi
        done;
      )

}

여기서 $BASHPID는 현재 프로세스 컨텍스트의 PID입니다.

관련 정보