double-forkその後

ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道
forkの箇所を読み返したら、double-forkについて一言だけ触れてた。前読んだときには完全にスルーしてたっぽい。
どんな感じかなと思って、サンプルプログラムをいじってdouble-forkするプログラムを走らせてみた。すると、子プロセスからforkされた孫プロセスでexeclしたプロセスは、親プロセスがinitになってた。これがdouble-fork、てことでいいのかなあ。もっと突っ込んだ本を読みたくなる。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[]){

	pid_t pid1, pid2;

	if(argc != 3){
		fprintf(stderr, "Usage: %s <command> <argv>\n", argv[0]);
		exit(1);
	}

	if((pid1 = fork()) < 0){ /* 子プロセスをfork */
		fprintf(stderr, "fork(2)-1 failed\n");
		exit(1);
	}
	if(pid1 == 0){
		if((pid2 = fork()) < 0){ /* 孫プロセスをfork */
			fprintf(stderr, "fork(2)-2 failed\n");
			exit(1);
		}
		if(pid2 == 0){
			execl(argv[1], argv[1], argv[2], NULL); /* 第2引数で渡したコマンドを実行 */
			perror(argv[1]);
			exit(99);
		}
	}
}