${!}는 무엇을 반환하나요? [복사]

${!}는 무엇을 반환하나요? [복사]

내가 가지고 있는 스크립트에는

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

어떤 이유로든 스크립트가 종료되면 트랩을 실행합니다.

관련 정보