다음 bash 스크립트가 있습니다.
#!/bin/bash
set -m
(
(bin/pnvd &> /dev/null; kill 0) &
sleep 2
perl integration-test/fuzz-test.pl || kill 0
kill %1
)
서브셸의 처음 세 명령은 성공하고 종료 상태 0을 반환합니다. bin/pnvd
외부적으로 종료될 때까지 종료하지 마십시오.
그러나 하위 셸에서 네 번째 명령을 실행한 후 스크립트는 다음 출력과 함께 종료됩니다.
도구/통합 테스트: 8행: 4712로 종료((bin/pnvd &> /dev/null; kill 0) & sleep 2; perl Integration-tests/fuzz-test.pl || kill 0; kill %1)
상태 코드 143.
첫 번째 작업뿐만 아니라 전체 프로세스 그룹을 종료하는 것처럼 보이지만 kill %1
삭제하면 set -m
상태 0으로 종료됩니다.
나는별로 관심이 없다어떻게이 문제를 해결하세요.왜서브셸이 첫 번째 작업을 종료하면 상태 143으로 종료됩니까?
답변1
에서 인용https://stackoverflow.com/a/7294947/402322
또한 신호로 인해 프로그램이 종료되면 bash는 종료 상태를 다음과 같이 인코딩합니다.
128 + signal-number
따라서 SIGHUP은 129를 생성하고 SIGILL은 132를 생성하며 SIGTERM은 143을 생성하는 식입니다.
위의 내용은 프로세스가 SIGTERM을 수신했음을 의미합니다.
코드에는 세 개의 가 있습니다 kill
. kill %1
다른 두 개 중 하나를 제외할 수 있으면 kill 0
TERM 신호가 전송됩니다.