최근에 쉘 스크립트를 작업하고 있었고 bash 특수 변수 $
및 BASHPID
행동한다. Linux에서 실행되는 모든 프로세스에는 프로세스 ID가 할당됩니다. 이것이 운영 체제가 프로세스를 처리하는 방식입니다.
마찬가지로 bash 터미널 세션에도 프로세스 ID가 할당됩니다. "$"
라는 특수 변수가 있습니다. 및 "$BASHPID"
현재 셸의 프로세스 ID를 저장합니다.
계속해서 아래 명령을 실행하여 현재 쉘의 프로세스 ID가 무엇인지 확인하십시오. "$"
둘 다 및 "$BASHPID"
동일한 값을 반환합니다.
$ echo $$ # 특수 변수 인쇄 $$ echo $BASHPID # 변수 $BASHPID 인쇄
bash에서 쉘에서 외부 프로그램을 호출하면 하위 프로세스/서브쉘이 생성되고 프로그램은 하위 프로세스에서만 제출됩니다. “sample.sh”라는 스크립트에 간단한 프로세스 모니터 명령을 넣은 아래 예를 참조하세요. 상위 쉘이 프로그램을 실행하기 위해 서브쉘을 생성하는 방법을 보여줍니다.
#!/usr/bin/env bashps -ef --forest | grep -i bash
이제 이 스크립트를 실행하면 bash의 프로세스 ID를 얻을 수 있습니다. 아래 이미지를 보면 bash가 자식 프로세스를 생성하고 스크립트를 실행하는 스크립트를 호출한 것을 이해할 수 있습니다.
$ ./sample.sh
이제 "$"
를 모두 사용하겠습니다. 및 "$BASHPID"
스크립트 내부에서 반환되는 내용을 확인하세요.
#!/usr/bin/env bashecho "===========================================================================================================================================================grep -i bashecho "=============================="echo "$0 스크립트에 대해 $를 사용하는 PID ==> $$"echo " 스크립트에 BASHPID를 사용하는 PID $0 ==> $BASHPID"echo
이제 스크립트를 다시 실행하십시오.
$ ./sample.sh
좋습니다. 동일한 프로세스 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
새 자식 프로세스 ID를 저장해야 합니다. 하지만 위의 이미지에서$
위치에 차이가 있음을 알 수 있습니다. 매장 382 이는 상위 ID입니다(스크립트 sample.sh의 프로세스 ID ) 및$BASHPID
괄호로 만든 생성된 자식 프로세스 ID를 저장합니다.이제 이 동작을 이해하려고 합니다. 매뉴얼 페이지가 말하는 내용을 살펴보겠습니다.
$맨 배쉬
$
를 사용할 때 , 서브 쉘에서도 생성된 상위 프로세스의 프로세스 ID를 저장합니다. 하지만BASHPID
현재 프로세스 ID를 저장합니다. 즉, 괄호 안에 호출될 때 하위 프로세스 ID를 저장합니다.
$
변수를 할당하거나 수정할 수 없습니다. 하지만BASHPID
재할당할 수 있지만 효과가 없습니다.$ $=10$ BASHPID=10$ 에코 $BASHPIDBASHPID 설정을 해제할 수 있습니다. . 설정을 해제하면 특수 상태를 잃게 되며 이를 일반 변수로 사용할 수도 있습니다.
$ unset BASHPID$ echo $BASHPID$ BASHPID="Tecmint"$ echo $BASHPID셸의 프로세스 ID를 할당하려고 해도 이미 특수 상태를 잃어버렸기 때문에 사용자 정의 변수로 처리됩니다.
$ BASHPID=$(에코 $$)$ 에코 $$;에코 $BASHPID이 경우 BASHPID에 대해 새 터미널 세션을 사용해야 합니다. 특별한 상태를 얻기 위해.
그것이 이 글의 내용입니다.
$
의 차이점을 확인했습니다. 및BASHPID
그리고 그들이 이 기사에서 어떻게 행동하는지. 이 기사를 살펴보고 소중한 피드백을 공유해 주세요.