execve()는 자식 프로세스를 부모 프로세스와 독립되게 만드나요?

execve()는 자식 프로세스를 부모 프로세스와 독립되게 만드나요?

프로세스가 하위 프로세스를 분기()하면 두 프로세스가 관련됩니다. 하위 프로세스는 파이프 및 익명 메모리 맵과 같은 일부 IPC 개체를 포함하여 상위 프로세스로부터 많은 것을 상속받습니다.

하위 프로세스 execve()가 실행 파일인 경우 상위 프로세스와 하위 프로세스는 관련이 없습니까? 해당 프로세스에만 적용되는 사항은 더 이상 유효하지 않습니까?

예를 들어, 다음 문장이 맞나요?

  • 쉘 프로세스는 실행 파일을 execve()하기 위해 자식 프로세스를 fork()합니까?

  • 쉘 프로세스와 그 하위 프로세스는 해당 프로세스의 IPC 메커니즘을 통해서만 통신할 수 있습니까?

감사해요.

답변1

execve()메모리를 완전히 교체합니다.

열린 상태로 유지되도록 표시되지 않은 파일 핸들을 닫습니다. (일반적으로 STDIN, STDOUT 및 STDERR은 이러한 방식으로 표시됩니다.) 플래그 를 참조하십시오 O_CLOEXEC. (더 정확하게 말하면 닫힘으로 표시된 파일 설명자를 닫습니다.)

신호 처리기를 재설정하지만 SIG_IGN 및 SIG_DFL은 변경되지 않습니다.

상위/하위 관계나 제어 터미널은 변경되지 않습니다.

SysV IPC 개체에 대해서는 잘 모르겠지만 처음부터 특정 프로세스 메모리에 존재한다고 생각하지 않습니다.

관련 정보