하위 프로세스에서 dup2 및 execvp를 호출한 후 상위 프로세스의 파일 설명자 테이블은 어떻게 되나요?

StackOverflow https://stackoverflow.com//questions/25050117

  •  21-12-2019
  •  | 
  •  

문제

간단한 쉘 프로그램을 코딩하고 있지만 dup2() 및 execvp 이후에 파일 설명자 테이블에 어떤 일이 발생하는지 확신할 수 없습니다.따라서 하위 프로세스가 끝나기를 기다리는 상위 프로세스가 있지만(waitpid) 다음 사용자 입력을 기다리기 위해 루프백할 때 하위 프로세스에서 dup2를 사용하여 수정한 파일 설명자 테이블이 상위 프로세스에서 지속되지 않는 이유는 무엇입니까?execvp가 파일 설명자 테이블을 다시 원본으로 재설정하기 때문입니까?

편집하다:나는 그것을 알아.포크 기능은 실제로 파일 설명자 테이블을 포함하여 프로그램 이미지의 별도 복사본을 만들어 상위 프로세스의 fd 테이블이 영향을 받지 않도록 합니다.

도움이 되었습니까?

해결책

아무것도 아님.자식 프로세스는 다음에 의해 생성될 때 부모의 파일 설명자의 복사본을 얻습니다. fork(), 하지만 그 이후의 변경 사항은 상위 항목과 다시 공유되지 않습니다.

(파일 설명자가 테이블 파일 설명자 자체의 상태는 상위 항목과 공유되지 않습니다!예를 들어, 만약 당신이 seek() 하위 프로세스가 상위 프로세스로부터 상속받은 파일 설명자에서 이는 상위 프로세스의 복사본에도 영향을 미칩니다.)

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