SIGQUIT는 bash 스크립트를 종료하는 효과가 없나요?

SIGQUIT는 bash 스크립트를 종료하는 효과가 없나요?
#!/bin/bash --

echo "$$"

LC_ALL=C sed 's/[!-~]/b/g' /tmp/bigfile > /tmp/outfile

echo end of script

QUIT송신 신호를 사용 하면 Ctrl + \다음과 같은 결과가 출력됩니다.

# ./script.sh
6739
^\./script.sh: line 5:  6740 Quit                    LC_ALL=C sed 's/[!-~]/b/g' /tmp/bigfile > /tmp/outfile
end of script

예상대로 종료 sed되고 코어 덤프가 발생하지만 스크립트는 계속됩니다. 이것이 예상되는 동작입니까? and 를 사용 bash하지만 ashnot dashor 을 사용하여 이런 일이 나에게 일어났습니다 ksh93.

답변1

예, bash무시합니다 SIGQUIT. 에서 인용수동(강조):

3.7.6 신호

Bash가 대화형일 때 트랩 없이 무시되고 SIGTERM( kill 0대화형 쉘이 종료되지 않도록) 포착되어 처리됩니다( 내장 명령이 중단될 수 SIGINT있도록 ). waitBash가 이를 수신하면 SIGINT실행 루프에서 벗어납니다.모든 경우에 Bash는 무시합니다.SIGQUIT. 작업 제어가 적용되는 경우 Bash는 SIGTTIN, SIGTTOU및 를 무시합니다 SIGTSTP.

이는 비표준 동작이며 대부분의 다른 쉘에서는 이를 수행하지 않습니다.


설득력이 없다고 생각되면 소스 코드를 살펴보세요: shell_initialize()-> initialize_signals(0)-> initialize_shell_signals()->set_signal_handler (SIGQUIT, SIG_IGN)무조건 에서 호출됩니다 main().

관련 정보