execlp("ls", "ls", "-a", (char*)NULL));
char *argv[3];
argv[0] = "ls";
argv[1] = "-a";
argv[2] = NULL;
execv("/usr/bin/ls", argv);
char *argv[3];
char *envp[2];
argv[0] = "arg.out";
argv[1] = "100";
argv[2] = NULL;
envp[0] = "MYENV=hanbit";
envp[1] = NULL;
execve("./arg.out", argv, envp);
pid_t pid;
switch(pid = fork()){
case 0:
execlp("ls", "ls", "-a", (char*)NULL);
exit(0);
break;
default:
break;
}
자식 프로세스가 모든 자원을 반납했어도 부모 프로세스가 종료 상태 정보를 받지 않거나 자식 프로세스보다 먼저 종료하는 경우가 발생.
실행을 종료한 후 자원을 반납한 자식 프로세스의 종료 상태 정보를 부모 프로세스가 받지 않는 경우 좀비 프로세스가 발생.
자식 프로세스가 종료할 때까지 부모 프로세스를 기다리게 함.
wait() 함수의 리턴값은 자식 프로세스의 PID
int status;
pid_t pid;
switch(pid = fork()){
case 0:
exit(2);
default:
while(wait(&status) != pid) continue;
}
SIGHUP
시그널을 전송SIGCHLD
시그널을 전송특정 PID 의 자식 프로세스가 종료하기를 기다림
자식 프로세스의 종료 상태값을 status에 저장하고 options의 조건에 따라 리턴
첫 번째 인자인 pid에 지정할 수 있는 값:
세 번째 인자인 options에 지정할 수 있는 값:
int status;
pid_t pid;
pid = fork();
if(pid == 0){
sleep(3);
exit(3);
}
while(waitpid(pid, &status, WNOHANG) == 0){
sleep(1);
}