백그라운드 프로세스의 $$ 값에 대한 문서

백그라운드 프로세스의 $$ 값에 대한 문서

$$Bash 백그라운드 프로세스의 값에 대한 문서가 있나요?


man$$서브셸에 있는 기본 프로세스의 PID라고 주장합니다 .

다음 문서에 따르면 서브쉘은 중괄호를 통해 생성되지만 공식 서브쉘은 (...)아닌 것으로 보입니다 .cmd &

https://tldp.org/LDP/abs/html/subshells.html

https://pubs.opengroup.org/onlinepubs/9699919799/xrat/V4_xbd_chap03.html

답변1

~에서기준:

명령 대체, 괄호로 묶인 명령 및비동기 목록서브쉘 환경에서 실행되어야 합니다.

cmd &비동기 목록.


그리고 (논쟁을 위해) 그것이 다음과 같다고 가정하자 cmd &.아니요서브쉘, 그러면 남은 유일한 것은기본쉘 환경에서는 $$메인 프로세스의 PID가 동일합니다.-)


참고: Bash에서는 파이프라인의 모든 명령이 하위 셸에서도 실행됩니다. ksh와 같은 일부 다른 셸에서는 파이프라인의 마지막 명령이 기본 셸 환경에서 실행됩니다. 그러면 다음과 같은 합계 가 1인쇄 됩니다 .bash3ksh

a=1; a=2 | a=3; echo $a

답변2

$$문서에는 몇 가지 참조가 있습니다 man bash.

특수 매개변수

$셸의 프로세스 ID로 확장됩니다. 서브쉘 에서는 ()서브쉘이 아닌 현재 쉘의 프로세스 ID로 확장됩니다.

쉘 변수

BASHPID현재 bash 프로세스의 프로세스 ID로 확장됩니다. 이는 $$bash를 다시 초기화할 필요가 없는 서브셸과 같은 경우와 다릅니다.

명령 실행 환경

셸에는 다음 부분으로 구성된 실행 환경이 있습니다.

  • [...]
  • 백그라운드 작업의 프로세스 ID, 값 $$및 프로세스 ID를 포함한 다양한 프로세스 IDPPID

$$경험상 서브셸 내에서 구문은 동일하게 유지되지만 다음과 같이 변경되는 것을 볼 수 있습니다 $BASHPID.

echo "$BASHPID - $$"                     # 23671 - 23671
( echo "$BASHPID - $$" )                 # 41199 - 23671
true | ( echo "$BASHPID - $$" ) | cat    # 41258 - 23671

관련 정보