프로세스를 어떻게 실행하고 실행 중에 SIGNAL을 보내나요?

프로세스를 어떻게 실행하고 실행 중에 SIGNAL을 보내나요?

xyz 프로그램을 실행해야 합니다. 몇 초 안에 실행이 완료됩니다. 테스트해야 할 신호 처리 기능이 있습니다. 쉘이나 bash 스크립트에서 프로그램을 어떻게 실행하고 실행하는 동안 kill -14.

현재 내가 시도하는 명령은 다음과 같습니다.

/usr/local/xyz input > some_file 2>&1 & PIDOS=$! && kill -14 $PIDOS

신호 처리를 트리거하지 않는 것 같습니다.

답변1

그 명령은 괜찮은 것 같습니다. 그런데 시도해 보니 명령이 너무 빠른 것 같습니다. 이는 마치 내 테스트 스크립트가 총에 맞기 전에 신호 처리기를 설치할 시간이 없었던 것과 같습니다.

테스트 스크립트:

$ echo '$SIG{USR1} = sub { print "GOT SIGNAL\n" }; sleep 100' >  sigtest.pl

즉시 촬영하세요. (수면 상태이므로 다음 프롬프트가 즉시 인쇄되지 않습니다.)

$ perl sigtest.pl & kill -USR1 $! ; sleep 1
[1] 8825
[1]+  User defined signal 1   perl sigtest.pl

아무것도 인쇄하지 않았지만 신호로 인해 죽었습니다. 잠시 시간을 내어 보겠습니다.

perl sigtest.pl & ( sleep 0.5 ; kill -USR1 $! )
[1] 8827
GOT SIGNAL
[1]+  Done                    perl sigtest.pl

이제 작동했고 신호 처리기가 실행되었습니다. (신호가 를 중단 sleep했으므로 스크립트는 어쨌든 종료되었습니다).

관련 정보