fork()で並行に処理

fork() で元プロセスのコピーを作って、親(元)プロセスで子が終わるのを待つ。
現在実行中ののプロセスが親か子かは fork() の戻り値で判断する。
子が終わるときは exit() でなく _exit() を用いる。
参考:プロセス制御

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

int child_loop() {
	int i;
	for (i=0; i<10; i++) {
		printf("child:%d\n", i);
		usleep(10000);
	}
	return 0;
}

int main_loop() {
	int i;
	for (i=0; i<10; i++) {
		printf("main:%d\n", i);
		usleep(10000);
	}
	return 0;
}

int main() {
	int pid;
	int rc, crc;
	switch (pid = fork()) {
	case -1: // fork()失敗
		perror("fork failed.");
		break;
	case 0: // 子プロセス
		printf("pid : %d, ppid : %d\n", getpid(), getppid());
		rc = child_loop();
		_exit(rc);
	default: // 親(元の)プロセス
		printf("pid : %d, child pid : %d\n", getpid(), pid);
		rc = main_loop();
		waitpid(pid, &crc, 0);
		printf("child ends with %d\n", crc);
	}
	return rc;
}

実行結果

$ ./a.exe
pid : 3412, child pid : 564
main:0
pid : 564, ppid : 3412
child:0
main:1
child:1
main:2
child:2
main:3
child:3
main:4
child:4
main:5
child:5
main:6
child:6
main:7
child:7
main:8
child:8
main:9
child:9
child ends with 0