fork


자신과 동일한 프로세스를 생성하는 함수이다.

성공시 부모 프로세스에선 자식 프로세스의 pid를 반환하고 자식 프로세스에선 0을 반환한다.

실패시 -1을 반환한다.

#include <unistd.h>
#include <sys/types.h>

pid_t fork(void);
pid_t vfork(void);

fork는 두 프로세스가 작동하지만 vfork는 자식 프로세스가 생성되고 종료될 때 까지 부모 프로세스가 일시적으로 중단된다.

exec - execute a file


#include <unistd.h>

int execl(const char *path, const char *arg0, ..., /*, (char *)0, */);
int execle(const char *path, const char *arg0, ..., /* (char *)0 char *const envp[] */);
int execlp(const char *file, const char *arg0, ..., /*, (char *)0, */);
int execv(const char *path, char *const argv[]);
int execve(const char *path, char *const argv[], char *const envp[]);
int execvp(const char *file, char *const argv[]);
int execvP(const char *file, const char *search_path, char *const argv[]);

반환값 : 성공시 0(하지만 받을 프로세서가 없다), 실패시 -1

l : 함수에서 가변인자를 지원하기때문에 원하는 만큼의 인자를 넘긴 뒤 NULL로 인자의 끝을 표기해준다.

v : 문자열 배열로 받는다

stdlib.h를 사용해 main(int argc, char *argv[])으로 받아 마지막에 NULL을 넣을 수 있는 새 배열을 만들어 인자로 넣는다고 한다.

e : 프로세스가 시작할 때 받아오는 환경변수 envp를 전달한다.

#include <stdlib.h>
// 환경 변수를 받아올 땐 이렇게 main 함수를 작성해야 한다고 한다.
int main(int argc, char *argv[], char *envp){return (0);}

p : 환경 변수 중 PATH를 읽어 파일을 탐색한다.

PATH에서 탐색에 실패한 경우 paths.h에서 PATH_DEFPAHT를 참조한다. 그 값은 “/usr/bin:/bin”로 정의되어있다.

exec 뒤에 p가 없는 경우 절대경로로 파일의 위치까지 명시해야한다.

P : 탐색할 경로를 추가적으로 넣어줄 수 있다.

wait


#include <sys/types.h>
#include <sys/wait.h>

pid_t wait(int *stat_loc);
pid_t wait3(int *stat_loc, int option, struct rusage *rusage);
pid_t wait4(pid_t pid, int *stat_loc, int option, struct rusage *rusage);
pid_t waitpid(pid_t pid, int *stat_loc, int option);