Linuxのプロセス生成にはfork() ※clone(), execve()の2つのシステムコールがある。
同じプログラムの処理を複数のプロセスに分けるのはfork()
– プロセスを新規作成
#include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <err.h> static void child(){ printf("I'm child! my pid is %d.\n", getpid()); exit(EXIT_SUCCESS); } static void parent(pid_t pid_c) { printf("I'm parent! my pid is %d and the pid of my child is %d.\n", getpid(), pid_c); exit(EXIT_SUCCESS); } int main(void) { pid_t ret; ret = fork(); if (ret == -1) err(EXIT_FAILURE, "fork() failed"); if (ret == 0) { child(); } else { parent(ret); } err(EXIT_FAILURE, "shouldn't reach here"); }
$ ./fork
I’m child! my pid is 314564.
I’m parent! my pid is 314563 and the pid of my child is 314564.