하위 프로세스 자체에서 하위 프로세스의 pid를 얻는 방법

하위 프로세스 자체에서 하위 프로세스의 pid를 얻는 방법

하위 프로세스 자체에서 하위 프로세스의 pid를 어떻게 얻을 수 있나요?

  foo()
{
 echo pid=$$
 echo spid=$!
 echo bpid=$BASHPID
}

echo PARENT_PID=$$
foo &
wait

처음 실행하면 다음과 같은 결과를 얻습니다.

PARENT_PID=17112
[1]     17512
pid=17112
spid=
bpid=

나는 spid 17512를 볼 것으로 예상했습니다.

두 번째로 실행하면 이상한 현상이 발생합니다.

PARENT_PID=17112
[1]     17797
pid=17112
spid=17512 #why I see here pid of previous subprocess???
bpid=

17797을 볼 것으로 예상했는데 17512가 나왔습니다!

따라서 두 가지 질문이 있습니다. 1) 하위 프로세스 내부에서 하위 프로세스의 pid를 어떻게 얻습니까? (Foo를 여러 번 실행하고 각 하위 프로세스의 pid를 볼 것으로 예상합니다.)
2) 두 번째 실행에서 예상치 못한 결과가 나오는 이유는 무엇입니까?

답변1

POSIX 표준 정의는 $$항상 기본 쉘의 pid입니다.

프로세스가 백그라운드에서 실행 중인 경우 $!마지막 백그라운드 프로세스의 pid를 반환합니다.

관련 정보