fork
読み:フォーク
外語:fork
分岐すること。UNIXのシステムコール(UNIX API)の一つで、子プロセスを生成するもの。
概要
UNIXでプロセスを生成する仕組みである。fork(2)システムコールを呼び出すことで行なう。
このとき、プロセスのコピー生成作業を「forkする」のように呼び、作成されたプロセスが子プロセス、fork(2)を呼び出した元のプロセスを親プロセスという。
特徴
プロセスの起動の基本原理は、次のようになる。
- fork()を行なう。
- プロセスが複製され、親子2つのプロセスが同じコードを並行して動作する状態になる。
- forkは親に対しては子のプロセスID、子に対しては0を返す(エラーなら-1)。
- forkの返値によって処理を分岐させる。
- 非0の値を得たほうのプロセス(親プロセス)は単にwait(2)で子の終了を待ったり、他の処理を続けたりする。
- 0を得たほうのプロセス(子プロセス)は子プロセスで実行すべきコードを実行したり、exec(2)系システムコールによって自分が実行するプログラムを置き換えたりする。
サンプル
子プロセスとしてlsを実行し、結果のステータスを表示するサンプルを以下に例示する。
#include <unistd.h>
#include <sys/types.h>
int main(int argc, char* argv[])
{
pid_t pid;
pid = fork();
if (pid == -1)
{
/* fork失敗。エラー。 */
perror("fork failed.");
}
else if (pid)
{
/* 親プロセス。たとえば単に子を待つ。 */
int status;
wait(&status);
printf("child existed:%d\n", status);
}
else
{
/* 子プロセス。別のプログラムを実行するなど。 */
execl("/bin/ls", NULL);
}
return EXIT_SUCCESS;
}
再検索