문제
다음 중 프로세스에 관한 설명으로 틀린 것은?
① 보통 명령어를 실행하면 exec 형태로 수행된다. ② init 프로세스는 모든 프로세스의 부모 프로세스다. ③ exec는 원래 프로세스의 메모리에 새로운 프로세스의 코드를 덮어씌운다. ④ fork는 새로운 프로세스를 위해 메모리를 할당 받아 복사본 형태로 실행한다.
정답
1번
해설
정답: 1. 보통 명령어를 실행하면 셸은 fork 로 자식 프로세스를 만든 뒤 그 자식에서 exec 로 프로그램을 적재해 실행한다(fork-exec). 명령 실행이 곧바로 "exec 형태로 수행된다"는 서술은 fork 단계를 빠뜨려 부정확하므로 틀린 설명이다.
오답 풀이
- 1번: 일반 명령 실행은 fork 후 exec 로 이루어지므로 "exec 형태로 수행"만으로 단정한 1번이 틀린 보기(정답)이다.
- 2번: init(또는 systemd)은 PID 1 로 모든 프로세스의 조상(부모)이므로 옳다.
- 3번: exec 는 호출한 프로세스의 메모리 이미지를 새 프로그램 코드로 덮어쓰므로 옳다.
- 4번: fork 는 부모를 복제해 별도 메모리를 가진 자식 프로세스를 만들므로 옳다.
보충 개념 fork()로 부모를 복제한 뒤 자식에서 exec()로 새 프로그램을 적재하는 fork-exec 패턴이 유닉스 프로세스 실행의 기본이다. exec 단독은 새 프로세스를 만들지 않고 현재 이미지를 교체한다.