각각 자체 로그 파일을 작성하는 여러 하위 쉘을 고려하십시오. 하위 쉘이 실패하여 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