fork() 및 exec() 혼동

fork() 및 exec() 혼동

현재 프로세스를 분기하면 상위 프로세스로서의 프로세스는 특성은 동일하지만 프로세스 ID가 다른 하위 프로세스를 생성합니다. 따라서 나중에 자식 프로세스에서 exec()를 실행하면 프로세스는 실행을 중지하고 중지된 자식 프로세스에서 실행 중인 프로그램은 이제 자체 프로세스를 갖게 됩니다.

이는 애플리케이션을 실행할 때와 동일하지 않습니까? 특히 각 애플리케이션에는 고유한 프로세스와 PID가 있기 때문입니다.

답변1

예, 그것이 UNIX에서 작동하는 방식이기 때문입니다.

"응용 프로그램 실행" 시스템 호출은 없습니다. 이는 항상 분기/실행 쌍에 의해 수행됩니다.

그건 그렇고, exec실제로아니요새로운 PID를 생성합니다.exec 바꾸다프로세스의 내용(메모리가 삭제되고 완전히 새로운 실행 파일이 로드됨)은 커널 상태(열린 파일, 환경 변수, 작업 디렉터리, 사용자 등)는 변경되지 않고 PID는 변경되지 않습니다.


관심이 있으시면 다음 내용을 자세히 읽어보시기 바랍니다.

  • vforkfork그거 빼고는 좋아~ 해야 하다항상 와 쌍을 이루며 execucLinux와 같이 작동하지 않을 때 유용합니다.fork

  • clone새로운 기능이지만 fork(오늘의 fork기능은 clone뒤에서 사용됨) 새로운 프로세스 생성을 포함하여 더 많은 작업을 수행합니다.공유하다동일한 메모리(예를 들어 복제하는 대신 fork)를 스레드라고 부릅니다.

관련 정보