プロセスラーニング-親プロセスサブプロセスID
1727 ワード
, fork , pid, 0; :
#include
#include
int main()
{
pid_t pid;
pid = fork();
//
if(pid != 0)
{
printf("this is father, child pid = %d
", pid);
}
//
if(pid == 0)
{
printf("this is child, father pid = %d
", getppid());
}
}
このプログラムを実行すると、次の結果が表示されます.hello@hello-machine:~/study-linux/unix_c/12-mem_share ./testthisisfather,childpid=3680thisischild,fatherpid=3679hello@hello−machine: /study−linux/unixc/12−memshare ./test this is father, child pid = 3682 this is child, father pid = 1 hello@hello-machine:~/study-linux/unix_c/12-mem_share$ ./test this is father, child pid = 3685 this is child, father pid = 3684
2番目の実行結果にサブプロセスの親プロセスpidが1の場合、forkの後に親プロセスが先に実行されるか、サブプロセスが先に実行されるかは不確定であり、このコードでは親プロセスとサブプロセスの内容は非常に簡単である.子プロセスが正常に終了すると、その終了ステータスが親プロセスに返されます.親プロセスが子プロセスの前に終了すると、このような処理が行われますか?親プロセスが終了したすべてのプロセスについて、親プロセスはinitプロセスに変更され、これらのプロセスにはinitプロセスが養子縁組されていると呼ばれます.具体的には、1つのプロセスが終了すると、カーネルはすべてのアクティブなプロセスを1つずつチェックし、プロセスを終了するサブプロセスであるかどうかを判断し、もしそうであれば、そのプロセスの親プロセスIDを1(initプロセスのID)に変更します.この処理方法は、各プロセスに親プロセスがあることを保証します.本明細書のコードでは、親プロセスが先に実行されると、子プロセスはinitプロセスによって受信され、親プロセスpidは1になります.