waitpid 함수의 두 번째 인자는 자식 프로세스의 종료 상태를 저장하기 위한 포인터이며, NULL은 종료시 상태정보를 저장하지 않는다는 뜻입니다. 이 인자는 자식 프로세스가 종료될 때 그 상태 정보를 담고 있는 변수의 주소를 전달합니다. 이 변수는 자식 프로세스의 종료 상태를 확인하는 데 사용되며, 여러 매크로를 통해 상태를 해석할 수 있습니다.
두 번째 인자: 상태 변수 (statloc)
- 정의: 두 번째 인자는 int *statloc 형식으로, 자식 프로세스의 종료 상태를 저장할 변수의 주소를 전달합니다. 이 변수는 자식 프로세스가 종료된 후, 그 상태를 확인하는 데 사용됩니다.
- 상태 확인 매크로:
- WIFEXITED(statloc): 이 매크로는 자식 프로세스가 정상적으로 종료되었는지를 확인합니다. 만약 자식 프로세스가 정상 종료되었다면, 이 매크로는 참(true)을 반환합니다.
- WEXITSTATUS(statloc): 자식 프로세스가 정상적으로 종료되었을 때, 이 매크로를 사용하여 종료 코드를 얻을 수 있습니다. 이 코드는 자식 프로세스가 exit 또는 _exit를 호출할 때 전달한 값을 반환합니다.
- WIFSIGNALED(statloc): 이 매크로는 자식 프로세스가 비정상적으로 종료되었는지를 확인합니다. 만약 자식 프로세스가 시그널에 의해 종료되었다면, 이 매크로는 참을 반환합니다.
- WTERMSIG(statloc): 자식 프로세스가 비정상적으로 종료된 경우, 이 매크로를 사용하여 종료된 이유가 되는 시그널 번호를 얻을 수 있습니다.
- NULL을 전달할 경우: 두 번째 인자에 NULL을 전달하면, 자식 프로세스의 종료 상태를 저장할 변수를 사용하지 않겠다는 의미입니다. 이 경우, 종료 상태에 대한 정보는 얻을 수 없지만, 프로세스가 종료되었는지 여부만 확인할 수 있습니다.
이러한 매크로와 상태 변수는 자식 프로세스의 종료 상태를 효과적으로 관리하고, 프로그램의 흐름을 제어하는 데 중요한 역할을 합니다. 예를 들어, 자식 프로세스가 정상적으로 종료되었는지 확인하고, 그에 따라 후속 작업을 결정할 수 있습니다.
세 번째 인자는 프로세스의 상태를 기다리는 방식에 대한 옵션을 설정하는 데 사용됩니다. 이 인자는 다양한 상수를 조합하여 사용할 수 있으며, 각 상수는 특정한 동작을 제어합니다.
주요 옵션 설명
- 0: 기본 동작으로, waitpid는 지정된 자식 프로세스가 종료될 때까지 호출한 프로세스를 블록합니다. 이 옵션을 사용하면 자식 프로세스가 종료될 때까지 기다리게 됩니다.
- WNOHANG: 이 옵션을 설정하면, 자식 프로세스가 종료되지 않았더라도 즉시 반환합니다. 즉, 자식 프로세스가 아직 종료되지 않은 경우에도 블록하지 않고, 0을 반환합니다. 이 옵션은 비동기적으로 자식 프로세스의 상태를 확인하고 싶을 때 유용합니다.
- WUNTRACED: 이 옵션을 사용하면, 자식 프로세스가 종료된 경우뿐만 아니라 중지된 상태(stopped)일 때도 반환됩니다. 즉, 자식 프로세스가 시그널에 의해 중지되었을 때도 그 상태를 확인할 수 있습니다.
- WCONTINUED: 이 옵션은 중지된 자식 프로세스가 다시 실행되었을 때 반환됩니다. 즉, SIGCONT 시그널을 통해 자식 프로세스가 재개되었을 때도 상태를 확인할 수 있습니다.
- WEXITSTATUS(status): 이 매크로는 자식 프로세스가 정상 종료되었는지 확인하고, 종료 코드를 반환합니다. 이 매크로는 waitpid의 두 번째 인자로 전달된 상태 변수에서 종료 코드를 추출하는 데 사용됩니다.
- WIFEXITED(status): 이 매크로는 자식 프로세스가 정상적으로 종료되었는지를 확인합니다. 만약 자식 프로세스가 정상 종료되었다면, 이 매크로는 참(true)을 반환합니다.
- WIFSIGNALED(status): 자식 프로세스가 비정상적으로 종료되었는지를 확인하는 매크로입니다. 이 매크로가 참이면, 자식 프로세스가 시그널에 의해 종료되었음을 의미합니다.
이러한 옵션들은 waitpid 함수의 동작을 세밀하게 조정할 수 있게 해주며, 프로세스 관리 및 상태 확인에 있어 매우 유용합니다. 예를 들어, 여러 자식 프로세스를 관리하는 복잡한 프로그램에서는 WNOHANG 옵션을 사용하여 자식 프로세스의 종료 여부를 비동기적으로 확인할 수 있습니다
'C Language' 카테고리의 다른 글
c언어에서 exit(0)과 exit(1)의 간단한 차이점 (0) | 2025.01.24 |
---|---|
파이프 입력부 및 출력부의 자식 프로세스 (0) | 2025.01.23 |
execve함수 설명 (0) | 2025.01.23 |
부모 자식 프로세스 fork pid pipe 코드 (0) | 2025.01.23 |
MiniLibX 에서 hook, KeyPressMask KeyReleaseMask의 의미 (2) | 2025.01.22 |