2011-07-31 1 views
2

은 위키 백과에서 인용 "포크 후 간부 살아남을 모든 프로세스 설정이 변경 될 수 있습니다"이해 :

마이크로 소프트 윈도우 스폰 기능은 유닉스에서 영감을 포크와 간부를 기능; 그러나 Windows는 fork (적어도 Win32 API, Cygwin 또는 SFU와 같은 POSIX 에뮬레이션 환경에서는 )를 지원하지 않으므로 fork-exec 조합 대신 spawn 함수가 제공됩니다. 그것은 가장 일반적인 사용 사례로 적절하게 다루고 있지만

그러나, 산란 기능은, 이후 포크 후 간부 살아남을 모든 프로세스 설정을 변경할 수 있습니다, 포크 간부의 모든 기능이 부족하다. 그러나 대부분의 경우이 결함은 낮은 수준의 CreateProcess API를 사용하여 보상 할 수 있습니다.

나는 윈도우 SPAW()가 유닉스 포크 - 간부보다 더 약한 이유를 이해하는 방법을 궁금 해서요 "포크 후 간부 살아남을 모든 프로세스 설정이 변경 될 수 있습니다"?

어떤 프로세스 설정에 대한 "변경"은 언제 발생합니까? fork와 exec 또는 exec 간?

자식 프로세스에서 부모 프로세스로부터 상속 된 환경 변수는 exec가 exec가 처리합니까?

몇 가지 예가 있습니까?

감사합니다.

답변

1

"변경"은 fork()와 exec() 사이에서 발생합니다. 상당히 많은 프로세스 상태가 exec를 통해 상속됩니다 (http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html 참조). 특히, 파일 디스크립터는 close-on-exec 비트가 설정되어 있지 않으면 상속됩니다.

일반적으로 파이프를 설정하고 파일 설명자를 리디렉션하기 위해 pipe() 및 dup() 호출을 사용합니다. 예 : 부모 프로세스가 자식과 통신 할 수 있도록 자식 프로세스의 표준 입력과 출력을 파이프에 연결합니다.