Bash 매뉴얼에 따르면
내장 함수나 쉘 함수가 아닌 간단한 명령을 실행하려고 하면... 쉘이 잡은 트랩을 다음과 같이 재설정합니다.쉘의 부모로부터 상속된 값, 그리고 쉘이 무시한 트랩은 무시됩니다
execve() 맨페이지설명하다
execve(2) 동안 처리된 신호의 처리는 다음과 같이 재설정됩니다.기본값;무시된 신호 처리는 변경되지 않습니다. "
"기본값"과 "쉘 상위에서 상속된 값"은 동일합니까?
execve()
신호 구성을 처리하는 방법을 추가로 변경하지 않고 bash를 호출할 수 있나요 execve()
?
감사해요.
답변1
아니요, "기본값"과 "쉘 상위에서 상속된 값"은 동일하지 않습니다. execve의 경우 "기본값"은 SIG_DFL
다음을 초래하는 기본 작업을 나타냅니다.man 7 signal
. bash 예제에서 "쉘의 부모로부터 상속된 값"은 해당 신호가 SIG_IGN
부모에 의해 무시되면( ) 자식도 무시된다는 의미입니다 .
여기서 무슨 일이 일어나고 있는지 이해하는 열쇠는 "프로세스"라는 단어입니다. SIG_DFL
또는 와는 다른 사용자 정의 신호 처리 기능을 나타냅니다 SIG_IGN
. 새 프로세스에는 이전 프로세스에서 사용했던 신호 처리기가 없기 때문에 execve로 재설정해야 합니다.
최신 버전의 execve 맨페이지에서는 나머지 Linux에서 사용되는 용어와 일치하도록 "처리된" 신호를 "잡힌" 신호로 참조합니다. 이는 기본 신호 및 무시된 신호와는 여전히 다릅니다.
간단한 버전: bash 또는 bash의 상위에 로 표시된 신호가 있는 경우 새 하위에도 SIG_IGN
해당 신호가 표시됩니다 . SIG_IGN
그렇지 않으면 SIG_DFL
새 자식에 있게 됩니다. 새 하위에는 bash 또는 해당 상위의 핸들러가 없으므로 새 하위에서는 핸들러가 될 수 없습니다.