내가 가지고 있는 스크립트에는
trap 'kill ${!}; term_handler' SIGTERM
따라서 pid ${!}를 종료하면 SIGTERM이 실행됩니다.
답변1
또는 마지막으로 실행된 명령이 반환되어야 하는 것이 ${!}
더 좋습니다 $!
.process ID (PID)
!
- 가장 최근에 실행된 백그라운드(async) 명령의 프로세스 ID로 확장되므로 마지막 백그라운드 작업의 프로세스 ID $!
가 포함됩니다 .process ID (PID)
이는 백그라운드에서 실행되는 프로그램을 나타냅니다.백그라운드 프로세스가 시작되지 않으면 이 매개변수가 설정되지 않습니다.
답변2
$!
또는 ${!}
백그라운드에서 실행 중인 마지막 프로세스의 프로세스 ID를 반환합니다.
예: wait $!
계속하기 전에 마지막 프로세스가 완료될 때까지 기다립니다.
답변3
trap 'kill ${!}; term_handler' SIGTERM
kill ${!}; term_handler
이는 쉘이 SIGTERM 신호를 수신할 때 쉘 명령이 실행된다는 것을 의미합니다. ${!}
예특수 매개변수$!
, 어느
($!)는 비동기 명령으로 실행되거나 bg 내장 명령을 사용하여 가장 최근에 백그라운드에 추가된 작업의 프로세스 ID로 확장됩니다.
스크립트가 SIGTERM을 수신한 다음 실행 term_handler
(아마도 일부 기능)하면 스크립트에 의해 시작된 마지막(아마도 유일한) 백그라운드 프로세스가 종료되는 효과가 있습니다. 트랩이 없으면 기본 스크립트가 끝난 후에도 백그라운드 프로세스가 계속 실행될 수 있습니다.
예를 들어 트랩이 특별히 SIGTERM
관련되어 있지만 SIGINT
그렇지 않으면 SIGHUP
정상적인 종료가 트리거되지 않습니다. 적어도 Bash에서는 사용할 수 있습니다
trap 'kill ${!}; term_handler' EXIT
어떤 이유로든 스크립트가 종료되면 트랩을 실행합니다.