신호 처리기에 대한 래퍼 설정

신호 처리기에 대한 래퍼 설정

주어진 명령을 실행하고 명령이 지정된 신호를 수신할 때 실행되도록 신호 처리기를 설정하는 래퍼가 필요합니다.

문제는 이것이다:

  1. 이 작업을 수행할 수 있는 유틸리티가 있나요?
  2. 그렇지 않은 경우 bash의 명령을 사용하여 trap이를 수행할 수 있습니까 exec?
  3. 그렇지 않다면 어떻게 해야 합니까? (예를 들어, 일부 시스템 호출을 수행하기 위해 C로 프로그램을 작성합니다.)

편집: 대상 플랫폼은 GNU/Linux입니다.

편집 2: Ignacio의 답변에 따라 다음과 같은 사전 로드 SO를 작성했습니다.이것.

답변1

할 수 없습니다. exec(3p)매뉴얼 페이지 에서 :

호출 프로세스 이미지에 의해 캡처되도록 설정된 신호는 새 프로세스 이미지에서 기본 작업으로 설정되어야 합니다.

프로그램이 시작되기 전에 신호 처리기를 연결할 사전 로드 SO를 작성해야 합니다.

답변2

신호( )만 무시하도록 만들 수 있습니다 . 셸( ) 또는 C 프로그램( )에서는 신호 처리기를 제공 SIG_IGN할 수 없습니다 . exec가 호출되면 모든 신호 처리기가 교체됩니다.trapsignal(2)

예:

:
trap "" 1 2
exec sleep 100000

그런 다음 백그라운드 또는 포그라운드에서 프로그램을 호출하고 SIGHUP또는 프로그램으로 보냅니다. SIGINT무시됩니다. 코드를 트랩에 넣으면 exec에서 신호가 재설정됩니다.

:
trap "echo signal caught" 1 2
exec sleep 10000

이것은 보낸 신호의 "신호 포착"을 인쇄하지 않지만 실제로 프로그램을 종료합니다.

관련 정보