
bash -c "sleep 5; echo 'test'"
위의 명령을 실행하고 CTRL-C
를 누르면 sleep 5
전체 프로세스가 종료되고 echo 'test'
표시되지 않습니다.
위 명령을 실행하고 sleep
명령 처리 SIGINT
( CTRL-C
)를 허용하려면 어떻게 해야 합니까?
SIGINT
내부 명령이 아닌 bash 프로세스 인 것 같아요 ?
답변1
bash
sleep
(및 기타 쉘)은 작업 제어 없이 스크립트를 실행하므로 ^C는 (모두 동일한 포그라운드 프로세스 그룹의 일부이기 때문에) 뿐만 아니라 전체 스크립트를 종료합니다 .
스크립트에서 다음 명령을 사용하여 작업 제어를 활성화해야 합니다 set -m
.
$ bash -c 'set -m; sleep 5; echo test'
^Ctest
$
또는잡다SIGINT
스크립트의 신호:
$ bash -c 'trap : SIGINT; sleep 5; echo test'
^Ctest
$
:
대신 참고 ''
하세요.소홀히 하다, 해당 하위 프로세스는 SIGINT
이 구성을 상속하고 무시합니다.
SIGINT가 내부 명령이 아닌 bash 프로세스로 들어갈 것 같아요?
두 가지 모두에 전송됩니다. 하나의 VINTR
문자( ^C
기본적으로)는 SIGINT
포그라운드 작업(프로세스 그룹)에서 모든 프로세스로 신호를 보냅니다.