programing

Linux/Unix Bash 스크립트는 어떻게 자체 PID를 가져올 수 있습니까?

easyjava 2023. 5. 9. 23:12
반응형

Linux/Unix Bash 스크립트는 어떻게 자체 PID를 가져올 수 있습니까?

나는 바시에서 불리는 대본이 있습니다.Script.sh자신의 PID를 알아야 합니다.다시 말해서, 나는 내부에 PID를 얻어야 합니다.Script.sh.

어떻게 하는지 아세요?

변수$$PID를 포함합니다.

사용하다$BASHPID또는$$

두 가지 차이점을 포함한 자세한 내용은 [매뉴얼][1]을 참조하십시오.

TL;DRTM

  • $$셸의 프로세스 ID로 확장합니다.
    • 인어()서브셸은 서브셸이 아닌 호출 셸의 프로세스 ID로 확장됩니다.
  • $BASHPID현재 Bash 프로세스의 프로세스 ID(Bash 4에 새로 추가됨)로 확장합니다.
    • 인어()하위 셸, 하위 셸의 프로세스 ID로 확장 [1]: http://www.gnu.org/software/bash/manual/bashref.html#Bash-Variables

Jefromi에서 참조한 고급 Bash 스크립팅 가이드에 제공된 예제 외에도 다음 예제에서는 파이프가 하위 셸을 생성하는 방법을 보여 줍니다.

$ echo $$ $BASHPID | cat -
11656 31528
$ echo $$ $BASHPID
11656 11656
$ echo $$ | while read line; do echo $line $$ $BASHPID; done
11656 11656 31497
$ while read line; do echo $line $$ $BASHPID; done <<< $$
11656 11656 11656

PID는 다음에 저장됩니다.$$.

예:kill -9 $$호출된 셸 인스턴스를 죽일 것입니다.

사용할 수 있습니다.$$변수.

프로세스가 하위 프로세스이고 $BASHPID가 설정되지 않은 경우 실행 중인 프로세스의 생성된 하위 프로세스의 ppid를 쿼리할 수 있습니다.좀 못생겼을 수도 있지만, 효과가 있습니다.예:

sleep 1 &
mypid=$(ps -o ppid= -p "$!")

사용자가 어디에 있든(대화형 명령줄 또는 스크립트에서) $BASHPID에 액세스할 수 없는 경우 다음을 사용하여 현재 셸 pid에 액세스할 수 있습니다.

bash - c 'echo $PPID'

여기서 단순 따옴표는 조기 문자열 해석을 방지하는 데 필수적입니다(해석이 현재가 아닌 하위 프로세스에서 발생하는지 확인하기 위해).원칙은 자식 프로세스를 만들고 부모 pid, 즉 "나 자신"을 요청하는 것입니다.이 코드는 ps 기반의 Joakim 솔루션보다 간단합니다.

언급URL : https://stackoverflow.com/questions/2493642/how-can-a-linux-unix-bash-script-get-its-own-pid

반응형