fork()와 exec()

Posted by yunki kim on February 4, 2022

  프로세스는 여러 시스템 호출로 인해 생성된다. 그 중 가장 잘 알려진것이 fork()와 exec()이다.

 

fork()

  fork()는 fork()를 호출한 프로세스를 복재해서 새로운 프로세스를 만든다. 이 프로세스를 child process라고 한다. 새로운 child process가 생성된 후, 프로세스들은 fork() 시스템 호출 다음 명령어를 실행한다. child process는 parent process와 같은 program counter, CPU resgister, open file들을 사용한다.

  fork()는 파리미터를 가지지 않고 정수를 반환한다.

    정수가 음수이면: child process 생성에 실패했다.

    정수가 0이면: child process에게 반환되는 값

    정수가 양수면: parent process가 반환받는 값이다. child process 생성 성공시 해당 child process의 PID를 반환한다.

  fork() 예제:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
 
void forkExample() {
    if (fork() == 0) {
        printf("Hello from child\n");
    } else {
        printf("Hello from parent\n");
    }
}
 
int main(void) {
    forkExample();
    return 0;
}
cs

 

exec()

  exec()는 fork()가 프로세스를 복제해 만드는 것과 달리 새로운 프로그램의 프로새스로 기존 프로세스를 대체한다.