Linuxプロセス間の同期を待つ

1.システムレベルの機能待機について

1.機能

    プロセスの同期を実現します。

    子プロセスの実行中、wait()は親プロセスの実行を一時停止し、待機させることができます。子プロセスが実行されると、待機中の親プロセスが再実行されます。場合に実行する複数の子プロセスが存在する中で、待機()親プロセス戻り最初の子プロセスが終了し、場合と親プロセスの実行が再開されます。

2.機能情報

ヘッダーファイル:sys / wait.h

関数シグネチャ:pid_t wait(int * status)

説明:

     仮パラメーター:statusが整数へのポインターである場合、waitが戻ると、ポインターは子プロセスの終了時にステータス情報を指します。

                ステータスがnullポインタの場合、waitはこのパラメータを無視します。

     戻り値:-1は、子プロセスが終了していないことを示します。その他は、終了した子プロセスのプロセス識別子を示します。

3.通常の使用法

    親プロセスは、子プロセスがwait()を呼び出した後、fork()を呼び出します。次の例:

pid=fork();
if (!pid)
{
    /* 子进程 */
} 
else 
{
    /* 父进程 */
    wait(NULL);
}

二、栗

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

int main()
{
    pit_t pid = -1;

    if((pid = fork()) < 0)
    {
        perror("fork failed");
        return 1;
    }

    if (!pid)
    { // 子进程
        sleep(4);
        return 5; 
    }
    else  // 父进程
    {
        int status = 0;
        if (wait(&status) < 0)
        {
            perror("wait failed");
            return 1;
        }

        if (status & 0xFF)
        {
            printf("Somne low-roderbits not zero\n");
        }
        else 
        {
            int exit_status = 0;
            exit_status=status >> 8;
            exit_status &= 0xFF;
            printf("Exit status from pid[%d] was exit_status[%d]\n", pid, exit_status);
        }
    }

    return 0;
}   

実行出力:pid [2]からの終了ステータスはexit_status [5]でした

注:pid値は、環境によって異なる場合があります。

おすすめ

転載: blog.csdn.net/xunye_dream/article/details/113729601