하위 프로세스에서 상위 프로세스의 프로세스 ID를 가져옵니다.

하위 프로세스에서 상위 프로세스의 프로세스 ID를 가져옵니다.

Fork 명령을 실행한 후 상위 프로세스만 하위 프로세스의 프로세스 ID를 얻을 수 있고 하위 프로세스에서는 상위 프로세스의 프로세스 ID에 액세스할 수 없으므로 파이프를 사용하여 프로세스를 전송해야 한다고 읽었습니다. 상위 프로세스에서 하위 프로세스까지의 ID입니다.

내 질문은, 부모 프로세스 ID를 얻기 위해 자식 프로세스에서 직접 getppid()를 사용할 수 없다는 것입니다. 왜 작동하지 않는지

답변1

Linux에서는 간단히 커널의 프로세스 정보를 확인할 수 있습니다.

grep ^PPid: /proc/12345/status

여기서 12345는 하위 프로세스의 PID입니다.

쉘의 부모를 찾으려면 다음을 수행하십시오.

grep ^PPid: /proc/$$/status

답변2

당신의 전제가 잘못되었습니다. 프로세스는 항상 를 호출하여 상위 프로세스의 프로세스 ID를 얻을 수 있습니다 getppid. getppid결코 실패하지 않는 드문 시스템 호출 중 하나입니다. 프로세스의 원래 부모 프로세스가 종료되더라도 자식 프로세스는 init에 의해 채택되므로 getppid1이 반환됩니다.

프로세스는 자식 프로세스의 PID, 조부모 프로세스의 PID, 형제 프로세스의 PID 등을 찾을 수 없습니다. 정확하게는 찾을 수 있지만 호출 ps이나 이에 상응하는 메서드(예: from /proc, 즉 관련 없는 모든 프로세스에서 동일한 메서드를 사용할 수 있음)를 통해서만 찾을 수 있습니다 .

관련 정보