티스토리 뷰

Linux

fork()와 exec()의 차이

두덕리온라인 2024. 2. 19. 07:59
728x90
반응형
fork()와 exec()는 UNIX 및 유닉스 계열 운영 체제(예: 리눅스)에서 프로세스를 생성하고 관리하는 데 사용되는 두 가지 중요한 시스템 호출입니다. 이들은 프로세스의 생성 및 실행에 있어 서로 보완적인 역할을 하지만, 각각의 목적과 작동 방식에는 분명한 차이가 있습니다.
 

fork()

  • 목적: fork() 시스템 호출은 호출한 프로세스(부모 프로세스)의 정확한 복사본을 생성하는 데 사용됩니다. 이 복사본을 자식 프로세스라고 합니다. 자식 프로세스는 부모 프로세스와 거의 동일한 메모리 이미지, 환경 변수, 파일 디스크립터 등을 가지지만, 프로세스 식별자(PID)는 다릅니다.
  • 작동 방식: fork()는 새로운 프로세스를 생성한 후, 부모 프로세스와 자식 프로세스에서 각각 다른 값을 반환합니다. 부모 프로세스에서는 자식 프로세스의 PID를 반환하고, 자식 프로세스에서는 0을 반환합니다. 이를 통해 프로그램은 부모와 자식 프로세스의 흐름을 구분할 수 있습니다.

exec()

  • 목적: exec() 시리즈 함수(execl(), execp(), execv() 등)는 현재 프로세스의 메모리 이미지를 새로운 프로그램의 메모리 이미지로 대체하는 데 사용됩니다. exec()가 성공적으로 실행되면, 현재 실행 중인 프로그램은 종료되고 지정한 새 프로그램의 실행이 시작됩니다.
  • 작동 방식: exec() 함수는 호출한 프로세스 내에서만 작동하며, 프로세스의 PID는 변경되지 않습니다. 대신, 프로세스의 코드, 데이터, 힙, 스택 등의 메모리 내용이 새로운 프로그램으로 완전히 대체됩니다. exec() 호출 후에는 이전 프로그램의 코드는 더 이상 실행되지 않습니다.

차이점

  • 프로세스 생성 vs. 실행: fork()는 새 프로세스를 생성하는 데 사용되며, 생성된 프로세스는 부모 프로세스의 복사본입니다. 반면, exec()는 현재 프로세스의 메모리 이미지를 새로운 프로그램으로 대체하여 실행하는 데 사용됩니다.
  • 메모리 이미지: fork() 호출 후에는 부모 프로세스와 자식 프로세스가 동일한 메모리 이미지를 가집니다. exec()는 현재 프로세스의 메모리 이미지를 새로운 프로그램으로 대체합니다.
  • PID 변화: fork()를 통해 생성된 자식 프로세스는 새로운 PID를 가집니다. exec()는 PID를 변경하지 않고 현재 프로세스 내에서 작동합니다.
 
일반적으로, 프로그램은 fork()를 호출하여 자식 프로세스를 생성한 후, 자식 프로세스에서 exec()를 호출하여 다른 프로그램을 실행하는 패턴을 사용합니다. 이러한 방식으로, 프로그램은 다양한 작업을 병렬로 처리하거나, 새로운 프로그램을 실행하는 등의 고급 프로세스 관리 작업을 수행할 수 있습니다.
반응형

'Linux' 카테고리의 다른 글

리눅스 프로세스 컨텍스트 스위칭  (0) 2024.02.20
linux에서 task와 process의 차이  (0) 2024.02.19
Linux virtual memory  (0) 2024.02.19
Android secure boot  (0) 2024.02.19
segmentation fault 와 page fault의 차이점  (0) 2024.02.19
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday