주어진 명령을 실행하고 명령이 지정된 신호를 수신할 때 실행되도록 신호 처리기를 설정하는 래퍼가 필요합니다.
문제는 이것이다:
- 이 작업을 수행할 수 있는 유틸리티가 있나요?
- 그렇지 않은 경우 bash의 명령을 사용하여
trap
이를 수행할 수 있습니까exec
? - 그렇지 않다면 어떻게 해야 합니까? (예를 들어, 일부 시스템 호출을 수행하기 위해 C로 프로그램을 작성합니다.)
편집: 대상 플랫폼은 GNU/Linux입니다.
편집 2: Ignacio의 답변에 따라 다음과 같은 사전 로드 SO를 작성했습니다.이것.
답변1
할 수 없습니다. exec(3p)
매뉴얼 페이지 에서 :
호출 프로세스 이미지에 의해 캡처되도록 설정된 신호는 새 프로세스 이미지에서 기본 작업으로 설정되어야 합니다.
프로그램이 시작되기 전에 신호 처리기를 연결할 사전 로드 SO를 작성해야 합니다.
답변2
신호( )만 무시하도록 만들 수 있습니다 . 셸( ) 또는 C 프로그램( )에서는 신호 처리기를 제공 SIG_IGN
할 수 없습니다 . exec가 호출되면 모든 신호 처리기가 교체됩니다.trap
signal(2)
예:
:
trap "" 1 2
exec sleep 100000
그런 다음 백그라운드 또는 포그라운드에서 프로그램을 호출하고 SIGHUP
또는 프로그램으로 보냅니다. SIGINT
무시됩니다. 코드를 트랩에 넣으면 exec에서 신호가 재설정됩니다.
:
trap "echo signal caught" 1 2
exec sleep 10000
이것은 보낸 신호의 "신호 포착"을 인쇄하지 않지만 실제로 프로그램을 종료합니다.