Linuxプログラミングfork()

Fork()は、
    負の値の作成に失敗し
        、異なるエラーコード(errno)、EAGAIN(システムプロセス数の制限)、ENOMEM(メモリの適用に失敗)、ENOSYS(サポートされていない)を返す子プロセスを作成します。システムプラットフォーム)。
    作成が成功すると、2つの値
        = 0が返されます。子プロセスの戻り値は、現在のプログラムが子プロセス
        > 0で実行されていることを示します。親プロセスの戻り値は、現在のプログラムが親プロセスで実行されていることを示します。戻り値は子プロセスのPID値です


wait()親プロセスは、子プロセスのステータス変更をブロックして待機します。通常、フォークで使用されます。

簡単な例:

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

int main()
{
    pid_t ret;
    int wstatus;
    
    ret = fork();
    if(ret > 0)
    {
        //父进程执行
        printf("it is father %d,ret=%d\n",getpid(),ret);
    }
    else if(ret == 0)
    {
        //子进程执行
        printf("it is child %d,ret=%d\n",getpid(),ret);
    }
    else
    {
        //创建进程失败,父进程执行
        printf("fork return error,ret=%d\n",ret);
    }

    //子父进程都会执行
    printf("my pid is %d.\n",getpid());
    while(1)
    {
        if(-1 != wait(&wstatus))
        {
            printf("%d process's child killed.\n",getpid());
            break;
        }
        sleep(1);
    }
    return 0;
}

結果:

ps axfを実行して、2つのプロセス間の関係を確認します

killコマンドを使用して子プロセスを強制終了し、wait()で子プロセスの変更の状態をキャプチャできます

おすすめ

転載: blog.csdn.net/qq_36413391/article/details/110872384