42Seoul/pipex

waitpid()

재윤 2023. 9. 13. 01:39
반응형

waitpid 함수는 wait 함수처럼 자식 프로세스를 기다릴때 사용하는 함수

자식 프로세스의 종료상태를 회수할 때 사용

 

  • waitpid 함수는 자식 프로세스가 종료될 때 까지 차단되는 것을 원하지 않을 경우, 옵션을 사용하여 차단을 방지 가능
#include <sys/wait.h>

 pid_t waitpid(pid_t pid, int *statloc , int options);
  • 성공 : 프로세스 ID 반환
  • 오류 : -1

첫 번째 인자

pid가 -1 일 경우  (pid ==  -1) 임의의 자식 프로세스를 기다림
pid가 0 보다 클 경우 (pid > 0) 프로세스 ID가 pid인 자식 프로세스를 기다림
pid가 -1 보다 작을 경우 (pid < -1) 프로세스 그룹 ID가 pid의 절댓값과 같은 자식 프로세스를 기다림
pid가 0일 경우 (pid == 0) waitpid를 호출한 프로세스의 프로세스 그룹 PID와 같은 프로세스 그룹 ID를 가진 프로세스를 기다림

waitpid 함수의 오류(-1)는 지정한 pid의 프로세스 또는 프로세스 그룹이 없는 경우에 발생하며 그리고 pid가 자식 프로세스가 아닐 때 발생.

두 번째 인자

waitpid 함수 반환 값 두 번째 인자 인 statloc 값

빈칸 waitpid 함수 반환 값 두 번째 인자 인 statloc 값

세 번째 인자

세 번째 인자로 사용가능한 상수 의미

WCONTINUED 중단 되었다가 재개된 자식 프로세스의 상태를 받음
WNOHANG 기다리는 PID가 종료되지 않아서 즉시 종료 상태를 회수 할 수 없는 상황에서 호출자는 차단되지 않고 반환값으로 0을 받음
WUNTRACED 중단된 자식 프로세스의 상태를 받음

waitpid 세 번째 인자에 0을 넣으면 wait과 똑같이 동작함.

예제

#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>

int main()
{
	int pid;

	pid = fork();
	if (pid == 0)
	{
		puts("자식 프로세스");
		//sleep(3);
		//exit(0);
	}
	else
	{
		while(waitpid(pid, NULL, WNOHANG) == 0)
		{
			puts("부모 프로세스 ");
			sleep(1);
		}
	
	}
}

//자식 프로세스가 살아있을 동안 waitpid를 걸어주면 그게 그만큼 실행된다.

[스카웃 C언어 강좌] 37-2 wait, waitpid 함수

 

[스카웃 C언어 강좌] 37-2 wait, waitpid 함수

[스카웃 C언어 강좌] 37-2 wait, waitpid 함수       머리말&#...

blog.naver.com

waitpid 함수 사용하기(wait함수와 비교)

 

waitpid 함수 사용하기(wait함수와 비교)

waitpid 함수는 wait 함수처럼 자식 프로세스를 기다릴때 사용하는 함수입니다. 즉, 자식 프로세스의 종료상태를 회수할 때 사용합니다. 하지만 waitpid 함수는 자식 프로세스가 종료될 때 까지 차단

codetravel.tistory.com

 

반응형

'42Seoul > pipex' 카테고리의 다른 글

exit()  (0) 2023.09.13
perror()  (0) 2023.09.13
fork()  (0) 2023.09.13
pipe(), unlink()  (0) 2023.09.13
access()  (0) 2023.09.13