Posts [42Seoul] pipex (2) 허용 함수 정리 : wait
Post
Cancel

[42Seoul] pipex (2) 허용 함수 정리 : wait

wait

1
2
3
#include <sys/wait.h>

pid_t wait(int *status);

자식 프로세스가 끝나기를 기다리는 함수이다.

status 변수에는 자식 프로세스가 종료할 때 보내는 시그널 또는 exit code 를 저장한다.

반환값

  • 자식 프로세스가 멈추거나 종료되면 종료된 자식 프로세스의 프로세스 아이디(pid)를 반환한다.
  • 오류가 발생하면 -1 을 반환한다.

예시 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <unistd.h>
#include <stdio.h>

int	main(void)
{
	pid_t	pid;
	int		status;

	pid = fork();
	if (pid == 0)
	{
		printf("[CHILD] Hello, I'm first child.\n");
		return (127);
	}
	else
	{
		printf("[PARENT] Hello, I'm parent.\n");
		wait(&status);
	}
	if (WEXITSTATUS(status) == 127)
	{
		printf("COMMAND NOT FOUND!\n");
	}
	return (0);
}

실행 결과는 다음과 같다.

1
2
3
[PARENT] Hello, I'm parent.
[CHILD] Hello, I'm first child.
COMMAND NOT FOUND!

자식 프로세스가 종료될 때 127 을 리턴하고, 부모 프로세스에서 자식 프로세스가 리턴한 값이 127 인지 확인하는 예시이다.

참고로 sys/wait.h 에는 자식 프로세스의 종료 상태를 확인할 수 있는 매크로가 선언되어 있다.

매크로설명
WIFEXITED(status)자식 프로세스가 정상적으로 종료되었다면 TRUE
WIFSIGNALED(status)자식 프로세스가 시그널에 의해 종료되었다면 TRUE
WIFSTOPPED(status)자식 프로세스가 중단되었다면 TRUE
WEXITSTATUS(status)자식 프로세스가 종료되었을 때 반환한 값

참고 자료

This post is licensed under CC BY 4.0 by the author.