Fork 명령을 실행한 후 상위 프로세스만 하위 프로세스의 프로세스 ID를 얻을 수 있고 하위 프로세스에서는 상위 프로세스의 프로세스 ID에 액세스할 수 없으므로 파이프를 사용하여 프로세스를 전송해야 한다고 읽었습니다. 상위 프로세스에서 하위 프로세스까지의 ID입니다.
내 질문은, 부모 프로세스 ID를 얻기 위해 자식 프로세스에서 직접 getppid()를 사용할 수 없다는 것입니다. 왜 작동하지 않는지
답변1
Linux에서는 간단히 커널의 프로세스 정보를 확인할 수 있습니다.
grep ^PPid: /proc/12345/status
여기서 12345는 하위 프로세스의 PID입니다.
쉘의 부모를 찾으려면 다음을 수행하십시오.
grep ^PPid: /proc/$$/status
답변2
당신의 전제가 잘못되었습니다. 프로세스는 항상 를 호출하여 상위 프로세스의 프로세스 ID를 얻을 수 있습니다 getppid
. getppid
결코 실패하지 않는 드문 시스템 호출 중 하나입니다. 프로세스의 원래 부모 프로세스가 종료되더라도 자식 프로세스는 init에 의해 채택되므로 getppid
1이 반환됩니다.
프로세스는 자식 프로세스의 PID, 조부모 프로세스의 PID, 형제 프로세스의 PID 등을 찾을 수 없습니다. 정확하게는 찾을 수 있지만 호출 ps
이나 이에 상응하는 메서드(예: from /proc
, 즉 관련 없는 모든 프로세스에서 동일한 메서드를 사용할 수 있음)를 통해서만 찾을 수 있습니다 .