문제

저는 현재 운영 체제 수업을 듣고 있는데 선생님은 수업 시간의 절반을 PID에 관해 이야기하는 데 보냈습니다.그녀는 많은 사람들이 알고 있듯이 프로세스가 부모의 ID를 알고 있다고 언급했습니다.

내 질문은 이것입니다:

프로세스의 PCB가 하위 ID를 알고 있습니까?그렇다면 그것을 얻기 위한 방법은 무엇입니까?

도움이 되었습니까?

해결책

내가 아는 한, 프로세스에는 자식 PID의 명시적인 목록이 없지만 프로세스는 자신이 생성하는 자식 프로세스를 알아야 하므로 쉽게 만들 수 있습니다.예를 들어 UNIX fork() 호출은 상위 프로세스의 하위 PID를 반환하고 하위 프로세스의 0을 반환하며, Windows의 CreateProcess()는 생성된 새 프로세스의 PID를 (IIRC) 반환합니다.

다른 팁

당신이 사용할 때 fork() *nix에서 반환 값은 상위 프로세스에서는 하위 프로세스의 PID이고 하위 프로세스에서는 0입니다.알아보는 것도 하나의 방법입니다.

그들이 프로세스 생성의 "트리"를 추적하는지 확실하지 않습니다. 사용하는 OS에 따라 다르지만 bash(또는 모든 쉘)를 종료하면 실행 중인 모든 하위 항목도 종료되기 때문에 UNIX와 같은 시스템도 그렇게 생각합니다. 이것을 추적하십시오.

Linux 또는 Unix API를 구현하는 모든 것을 사용하는 경우 프로세스가 자식 프로세스를 생성하기 위해 fork()를 호출하면 부모는 자식 PID를 반환 코드로 받거나, 포크가 실패한 경우 -1을 받습니다.하위 프로세스는 0 반환 코드를 얻습니다.

프로세스의 PCB는 자식 ID를 알고 있습니다.

우리가 알고 있듯이 Fork()는 프로세스를 생성하는 데 사용됩니다. 인수를 사용하지 않고 프로세스 ID를 반환합니다. 새 하위 프로세스가 생성된 후 상위 및 하위 프로세스는 모두 fork() 다음에 오는 다음 명령어를 실행합니다.거기서 우리는 부모와 자식을 구별해야 합니다. 이는 fork()의 반환 값을 테스트하여 수행할 수 있습니다.

Fork()가 음수 값을 반환하면 하위 프로세스 생성이 실패합니다.Fork()가 새로 생성된 하위 프로세스에 0을 반환하는 경우.Fork()가 자식 프로세스의 프로세스 ID로 양수 값을 부모 프로세스에 반환하는 경우.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top