![하위 프로세스 자체에서 하위 프로세스의 pid를 얻는 방법](https://linux55.com/image/7020/%ED%95%98%EC%9C%84%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%20%EC%9E%90%EC%B2%B4%EC%97%90%EC%84%9C%20%ED%95%98%EC%9C%84%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%9D%98%20pid%EB%A5%BC%20%EC%96%BB%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
하위 프로세스 자체에서 하위 프로세스의 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를 반환합니다.