Bash에 문제가 있으며 이유를 모르겠습니다.
쉘 아래에 다음을 입력합니다.
echo $$ ## print 2433
(echo $$) ## also print 2433
(./getpid) ## print 2602
"getpid"는 다음과 같이 현재 pid를 얻는 C 프로그램입니다.
int main() { printf("%d", (int)getpid()); return 0; }
나를 혼란스럽게하는 것은 :
- "(명령)"은 하위 프로세스라고 생각합니다. (내가 맞습니까?) 부모의 pid와 pid가 달라야한다고 생각하지만, 같은 이유는 무엇입니까?
- 내 프로그램을 사용하여 괄호 사이에 pid를 표시하면 표시되는 pid가 다릅니다. 맞습니까?
- '$$'는 매크로와 같은 것입니까?
도와주세요?
@Marian이
—
벤
echo $$ $BASHPID ; ( echo $$ $BASHPID )
그 사실을 보여줍니다. 둥근 괄호는 서브 쉘을 작성합니다. 명령문은 변수 값을 변경할 수 있으며 상위 쉘은 해당 변경 사항을 볼 수 없습니다. 이것은 작업으로 구현됩니다 fork()
.
getpid
이 서브 쉘에서 실행되지 않은 경우에도 다른 프로세스 ID를 표시합니다.