함수 | 의미 |
---|---|
fork | 자신과 완전히 동일한 프로세스를 생성한다 |
exec 계열 | 지정한 실행 파일로부터 프로세스를 생성한다 |
exit | 종료에 따른 상태 값을 부모 프로세스에게 전달하며 프로세스를 종료한다 |
atexit | exit로 프로세스를 종료할 때 수행할 함수를 등록한다 |
_exit | atexit로 등록한 함수를 호출하지 않고 프로세스를 종료한다 |
프로세스 생성
fork, exec
프로세스 종료
exit,atexit,_exit
pid_t fork(void);
return: fork 호출이 성공하여 자식 프로세스가 만들어지면 부모 프로세스에서는 자식 프로세스의 프로세스 ID가 반환되고 자식 프로세스에서는 0을 반환한다. fork 호출이 실패하여 자식 프로세스가 만들어지지 않으면 부모 프로세스에서는 -1이 반환된다.
int execl(const char path, const char arg, ...);
int execlp(const char file, const char arg, ...);
int execv(const char path, char const argv[]);
int execvp(const char file, char const argv[]);
path: 실행 파일의 경로로 상대 경로와 절대 경로 모두 사용할 수 있다.
file: 경로 이름이 아닌 실행 파일의 이름이다.
return: 호출이 성공하면 호출하는 프로세스에서는 반환값을 받을 수 없다, 만약 함수 호출 후 -1이 반환되면 이는 함수 호출이 실패했음을 의미한다.
arg: path나 file로 지정한 실행 파일을 실행할 때 필요한 명령어 라인의 옵션과 인자이다. 한 개 이상을 지정할 수 있으며 마지막 인자는 반드시 NULL 포인터로 지정해야 한다.
argv: arg와 같은 의미를 가지나 문자형 포인터의 배열로 형태가 다르다. 배열의 마지막은 NULL 문자열로 끝나야 한다.
l 과 v
실행에 필요한 매개변수 전달 방법의 차이
exec는 부모,자식 용어 대신 호출, 피호출이라는 용어를 사용한다
호출 프로세스( caller process )
- exec를 실행하는 프로세스
피호출 프로세스( callee process )
- exec에 의해 생성되는 프로세스
exec를 성공적으로 호출한 결과
Fork
자신과 동일한 자식 프로세스만 생성할 수 있다.
다른 종류의 프로세스를 생성할 수 없다.
자식 프로세스를 생성하더라도 자신은 종료되지 않는다.
exec
자신과 다른 종류의 프로세스를 생성할 수 있다.
새로운 프로세스를 생성하면 자신은 종료된다.
프로세스를 종료하면서 부모 프로세스에게 종료와 관련된 상태 값을 넘겨준다
void exit(int status);
status: 부모 프로세스에게 전달되는 상태값으로 0~255(1byte)의 값이 사용된다
return: 없음
exit는 프로세스를 의도적으로 종료시킨다.
이외에 프로세스가 종료하는 경우는
status의 값은 0~255 사이의 값으로 각각에 대한 정해진 의미가 없다.
프로세스가 exit를 호출하여 종료할 때 수행되는 함수들을 등록한다.
int atexit(void (*function)(void));
function: atexit로 등록할 함수의 이름이다
return: 호출이 성공하면 0을 반환하고, 실패하면 0이 아닌 값을 반환한다.
function
종료 시 마무리 작업 (clean-up-action)
exit 함수와 같지만 clean-up-action을 수행하지 않는다
void _exit(int status);
status: 부모 프로세스에게 전달되는 상태값으로 0~255(1byte)의 값이 사용된다
return: 없음