상황 : C로 작성된 다중 스레드 프로그램이 있습니다. 스레드 중 하나가 fork하면 exec()를 사용하여 자식 프로세스가 다른 것으로 대체되고 부모는 자식이 종료 될 때까지 기다립니다.C - exec가 멀티 스레드 프로세스에서 fork를 즉시 따라야합니까?
문제 : 자식 프로세스를 포크에 의해 생성된다 후() 인수가 다음 간부 인() 명령에 사용되는 컴파일 몇 줄의 코드가 있습니다.
가설 내가 자식 프로세스 사이의 시간에 포크 (에 의해 생성되는 가정에서 수정) 및 간부(), 자식 프로세스로 대체되고 있습니까 - 부모의 사본 인 -해야합니다 모든 쓰레드는 부모의 스레드이므로 매우 짧은 기간 동안 실행됩니다.
그렇다면 fork() 후에 exec()를 호출하는 올바른 해결책이 있습니까?
표준 라이브러리 (예 : stdio,'atexit','malloc', 쓰레드 생성과 파괴 등)는 내부적으로 동기화 자원을 사용할 수 있으며' 포크'? 그렇다면 어떻게'pthread_atfork'를 사용하면 문제가 해결 될까요? –
@R, 가능합니다. 그것은 도서관에 달려 있습니다. 경우에 따라 모든 뮤텍스를 잠근 다음 포크 직후에 릴리스 할 수 있습니다. 다른 사람들은 프로세스가 처음부터 시작한 것처럼 다시 초기화하는 것이 좋습니다. 나는'pthread_atfork'에서 관련 구절을 추가했습니다. –