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

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

waitpid

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

pid_t waitpid(pid_t pid, int *status, int options);

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

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

options 는 자식 프로세스를 기다릴 때 부모 프로세스가 어떻게 동작할 지 설정할 수 있다.

  • WNOHANG : 자식 프로세스가 실행 중인지, 종료되었는지 확인하고 다시 부모 프로세스로 복귀한다. 즉, 부모 프로세스를 block 하지 않는다.
  • 0 : 자식 프로세스가 종료할 때까지 부모 프로세스를 block 하며, wait 함수와 동일하다.

반환값

  • 자식 프로세스가 멈추거나 종료되면 종료된 자식 프로세스의 프로세스 아이디(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
#include <unistd.h>
#include <stdio.h>
#include <sys/wait.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");
		waitpid(pid, &status, WNOHANG);
	}
	printf("[PARENT] WNOHANG options proceed without waiting child process finished.\n");
	return (0);
}

실행 결과는 다음과 같다.

1
2
3
[PARENT] Hello, I'm parent.
[PARENT] WNOHANG options goes without waiting child process finished.
[CHILD] Hello, I'm first child.

참고 자료

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