C言語システムコール-wait

wait

概要

waitは子プロセスのいずれか1つが終了するまで実行を待ちます。

終了を待ち合わせた子プロセスのプロセスIDは、waitの戻り値として返されます。


待ち合わせたプロセスの終了ステータスの確認はマクロを使用します。

WIFEXITED(status)は、子プロセスがexitシステムコールで終了した場合に真となります。

WEXITSTATUS(status)は、子プロセスの終了ステータスを数値で取り出します。


wait関連システムコール

  • waitpid()
    • 待ち合わせ対象となる子プロセスを指定する場合に使用します。
  • wait3()
    • 子プロセスのリソース情報(実行のユーザ時間とシステム時間)をrusage構造体で受け取ることができます。
  • wait4()
    • wait3()の機能で、待ち合わせ対象の子プロセスを指定することができます。

サンプルプログラム


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

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

    pid = fork();
    if(pid < 0){
        printf("Error: fork(%d) %s\n", errno, strerror(errno));
        return(-1);
    }
    if(pid == 0){
        printf("child process\n");
        _exit(0);
    }

    pid = wait(&status);
    if(pid < 0){
        printf("Error: wait(%d) %s\n", errno, strerror(errno));
        return(-1);
    }
    /* 終了ステータスを確認する */
    if(WIFEXITED(status)){
        printf("pid=%d, status:%d\n", (int)pid, WEXITSTATUS(status));
    }
    printf("parent process\n");

    return(0);
}

関連ページ