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()で子プロセスの変更の状態をキャプチャできます