Computer >> 컴퓨터 >  >> 프로그램 작성 >> BASH 프로그래밍

Bash에서 $$와 $BASHPID의 차이점 알아보기

최근에 쉘 스크립트를 작업하고 있었고 bash 특수 변수 $BASHPID 행동한다. Linux에서 실행되는 모든 프로세스에는 프로세스 ID가 할당됩니다. 이것이 운영 체제가 프로세스를 처리하는 방식입니다.

관련 읽기 :Bash에서 소싱과 포크의 차이점 알아보기

마찬가지로 bash 터미널 세션에도 프로세스 ID가 할당됩니다. "$"라는 특수 변수가 있습니다. 및 "$BASHPID" 현재 셸의 프로세스 ID를 저장합니다.

계속해서 아래 명령을 실행하여 현재 쉘의 프로세스 ID가 무엇인지 확인하십시오. "$" 둘 다 및 "$BASHPID" 동일한 값을 반환합니다.

$ echo $$ # 특수 변수 인쇄 $$ echo $BASHPID # 변수 $BASHPID 인쇄
Bash에서 $$와 $BASHPID의 차이점 알아보기

bash에서 쉘에서 외부 프로그램을 호출하면 하위 프로세스/서브쉘이 생성되고 프로그램은 하위 프로세스에서만 제출됩니다. “sample.sh”라는 스크립트에 간단한 프로세스 모니터 명령을 넣은 아래 예를 참조하세요. 상위 쉘이 프로그램을 실행하기 위해 서브쉘을 생성하는 방법을 보여줍니다.

#!/usr/bin/env bashps -ef --forest | grep -i bash

이제 이 스크립트를 실행하면 bash의 프로세스 ID를 얻을 수 있습니다. 아래 이미지를 보면 bash가 자식 프로세스를 생성하고 스크립트를 실행하는 스크립트를 호출한 것을 이해할 수 있습니다.

$ ./sample.sh
Bash에서 $$와 $BASHPID의 차이점 알아보기 Bash에서 $$와 $BASHPID의 차이점 알아보기

이제 "$"를 모두 사용하겠습니다. 및 "$BASHPID" 스크립트 내부에서 반환되는 내용을 확인하세요.

#!/usr/bin/env bashecho "===========================================================================================================================================================grep -i bashecho "=============================="echo "$0 스크립트에 대해 $를 사용하는 PID ==> $$"echo " 스크립트에 BASHPID를 사용하는 PID $0 ==> $BASHPID"echo

이제 스크립트를 다시 실행하십시오.

$ ./sample.sh
Bash에서 $$와 $BASHPID의 차이점 알아보기 Bash에서 $$와 $BASHPID의 차이점 알아보기

좋습니다. 동일한 프로세스 ID를 반환합니다. 여기에 실제 차이가 있습니다. parentheses() 내에서 명령을 실행하여 스크립트 내에서 또 다른 자식 프로세스를 생성해 보겠습니다. .

# PID를 변수에 저장…VAR_HASH=$(echo $$)VAR_BASHPID=$(echo $BASHPID)echo "VALUE OF VAR_HASH ==> $VAR_HASH"echo "VALUE OF VAR_BASHPID ==> $VAR_BASHPID" Bash에서 $$와 $BASHPID의 차이점 알아보기  Bash에서 $$와 $BASHPID의 차이점 알아보기  

bash에서 괄호 자식 프로세스를 호출하고 괄호 안에 오는 모든 것을 실행합니다. 이 경우 $$BASHPID 새 자식 프로세스 ID를 저장해야 합니다. 하지만 위의 이미지에서 $ 위치에 차이가 있음을 알 수 있습니다. 매장 382 이는 상위 ID입니다(스크립트 sample.sh의 프로세스 ID ) 및 $BASHPID 괄호로 만든 생성된 자식 프로세스 ID를 저장합니다.

이제 이 동작을 이해하려고 합니다. 매뉴얼 페이지가 말하는 내용을 살펴보겠습니다.

$맨 배쉬
Bash에서 $$와 $BASHPID의 차이점 알아보기 Bash에서 $$와 $BASHPID의 차이점 알아보기 Bash에서 $$와 $BASHPID의 차이점 알아보기 Bash에서 $$와 $BASHPID의 차이점 알아보기

$를 사용할 때 , 서브 쉘에서도 생성된 상위 프로세스의 프로세스 ID를 저장합니다. 하지만 BASHPID 현재 프로세스 ID를 저장합니다. 즉, 괄호 안에 호출될 때 하위 프로세스 ID를 저장합니다.

$ 변수를 할당하거나 수정할 수 없습니다. 하지만 BASHPID 재할당할 수 있지만 효과가 없습니다.

$ $=10$ BASHPID=10$ 에코 $BASHPID
Bash에서 $$와 $BASHPID의 차이점 알아보기

BASHPID 설정을 해제할 수 있습니다. . 설정을 해제하면 특수 상태를 잃게 되며 이를 일반 변수로 사용할 수도 있습니다.

$ unset BASHPID$ echo $BASHPID$ BASHPID="Tecmint"$ echo $BASHPID
Bash에서 $$와 $BASHPID의 차이점 알아보기

셸의 프로세스 ID를 할당하려고 해도 이미 특수 상태를 잃어버렸기 때문에 사용자 정의 변수로 처리됩니다.

$ BASHPID=$(에코 $$)$ 에코 $$;에코 $BASHPID
Bash에서 $$와 $BASHPID의 차이점 알아보기

이 경우 BASHPID에 대해 새 터미널 세션을 사용해야 합니다. 특별한 상태를 얻기 위해.

그것이 이 글의 내용입니다. $의 차이점을 확인했습니다. 및 BASHPID 그리고 그들이 이 기사에서 어떻게 행동하는지. 이 기사를 살펴보고 소중한 피드백을 공유해 주세요.