Bash: 서브쉘에서 SIGTERM(또는 기타)을 잡는 것이 가능합니까?

Bash: 서브쉘에서 SIGTERM(또는 기타)을 잡는 것이 가능합니까?

각각 자체 로그 파일을 작성하는 여러 하위 쉘을 고려하십시오. 하위 쉘이 실패하여 SIGTERM(일부 메커니즘을 사용하여) 모든 하위 쉘에 메시지가 전송되는 것을 고려하십시오. SIGTERM모든 서브쉘은 수신 즉시 종료됩니다. 그러나 SIGTERM-로 끝나는 서브쉘 로그 파일은 유지됩니다. 그것이 문제이다.

질문: 서브쉘 로그 파일을 받은 후 어떻게 삭제합니까 SIGTERM?

나는 이것을 시도했습니다 :

_term()
{
  rm -f $log_file
}

trap _term SIGTERM

그러나 내가 이해한 바에 따르면 이것은 작동하지 않습니다. 왜냐하면 "트랩 핸들러는 서브쉘에 의해 상속되지 않습니다.".

내부에설명trap이해합니다:

무시되지 않는 트랩은 서브쉘에 들어갈 때 기본 동작으로 설정됩니다. 이는 새 트랩을 설정하기 위해 하위 쉘에서 Trap 명령을 사용할 수 없다는 의미는 아닙니다.

마지막 문장이 좀 헷갈리네요. 이것이 가능한지 누군가 설명할 수 있습니까?별말씀을요SIGTERM(또는 다른 방법으로) 서브셸에 캡처됩니까 ?

답변1

네, 유전적이지는 않습니다. 하지만 서브쉘에서 새로운 트랩을 정의할 수 있습니다. 상위 쉘에는 자체 트랩 세트가 있습니다.

그런 다음 상위 셸에 신호를 보내면 상위 셸은 신호를 포착하고 자체 신호 세트를 하위 셸로 내보낼 수 있습니다.

설명이 포함된 다양한 예는 다음과 같습니다. https://tldp.org/LDP/abs/html/debugging.html#EX76

관련 정보