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


149

Bash라는 스크립트가 Script.sh있으며 자체 PID를 알아야합니다 (예 : Script.sh 내에서 PID를 가져와야 함)

이 방법을 알고 있습니까?

답변:



65

사용 $BASHPID또는$$

둘 사이의 차이점을 포함하여 자세한 내용은 설명서 를 참조하십시오 .

TL; DRTFM

  • $$ 쉘의 프로세스 ID로 확장합니다.
    • ()서브 쉘 에서는 서브 쉘이 아닌 호출 쉘의 프로세스 ID로 확장됩니다.
  • $BASHPID 현재 Bash 프로세스의 프로세스 ID로 확장됩니다.
    • A의 ()서브 쉘, 상기 하부 쉘의 프로세스 ID로 확장

10
양해를 수행 $$ 및 BASHPID은 항상 같은 것이 아니다 - 수동이를 언급하고,보다 구체적인 예를 여기있다 : tldp.org/LDP/abs/html/internalvariables.html . 많은 bash 구조가 서브 쉘에서 실행되므로 구별이 매우 중요 할 수 있습니다.
Cascabel

@Jefromi-언급했다. 그것이 내가 매뉴얼에 링크 된 이유 중 하나였습니다.
tvanfosson

2
그것은 주목해야한다 $BASHPIDBASH 4. BASH 3.x를를 사용하는 경우에 새로운, 당신은 사용이$$
브루노 Bronosky

36

Jefromi가 참조한 Advanced 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

"<<<"이 무슨 뜻인지 설명해 주시겠습니까? 감사.
Sopalajo de Arrierez 2016 년

4
문자열을 루프 또는로 읽는 문자열로 리디렉션합니다 stdin. 이 문자열을 "여기서 문자열"이라고합니다.
추후 공지가있을 때까지 일시 중지되었습니다.

8

PID는에 저장됩니다 $$.

예 : kill -9 $$호출 된 쉘 인스턴스를 종료합니다.


kill -9( -9플래그 포함)는 유해한 것으로 간주되며 반드시 필요한 경우에만 사용해야합니다.
Willem Van Onsem

3
프로세스가 신호에 응답 할 수있는 기회를 얻지 못하기 때문에 "위험한"것으로 간주됩니다. 이렇게는 kill -9 $$정확히 1 일을한다. 그것은 죽이기 현재 쉘 프로세스를 . 쉘 세션에서 다음 .bash_history과 같이 작성하고 싶지 않은 작업을 수행 한 경우 유용합니다 .docker run -e PASSWORD=hunter2 ircbot
Bruno Bronosky


0

프로세스가 하위 프로세스이고 $ BASHPID가 설정되지 않은 경우 실행중인 프로세스의 작성된 하위 프로세스의 ppid를 조회 할 수 있습니다. 약간 추한 것일 수도 있지만 작동합니다. 예:

sleep 1 &
mypid=$(ps -o ppid= -p "$!")
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.