kazmax - Linux で自宅サーバー

fork - システムコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. エラー
  6. 準拠
  7. 関連項目

名前

fork - 子プロセスを生成する

書式

#include <sys/types.h>
#include <unistd.h>
pid_t fork(void);

説明

fork ()は親プロセスと PID (プロセス ID)、および PPID (親プロセス ID) だけが 異なる子プロセスを生成する。 この時、資源利用量は 0 に設定される。 ファイルロックと保留しているシグナルは引き継がれない。

Linux では、 fork ()を 書き込み時コピー (copy-on-write)・ページを用いて実装している。 したがって、fork を行うことの唯一のデメリットは、 親プロセスのページ・テーブルを複製と 子プロセス自身のタスク構造の作成のための時間とメモリが必要なことである。

返り値

成功した場合、親の実行スレッドには子プロセスの PID が返され、 子の実行スレッドには 0 が返される。 失敗した場合、親プロセスに -1 を返し、子プロセスは生成されない。 また、 errno が適切に設定される。

エラー

EAGAIN
親プロセスのページ・テーブルのコピーと 子プロセスのタスク構造に生成に必要なメモリを fork ()が割り当てることができなかった。
EAGAIN
呼び出し元の RLIMIT_NPROC 資源の制限 (resource limit) に達したために、新しいプロセスを生成できなかった。 この制限を超えるには、プロセスは CAP_SYS_ADMIN または CAP_SYS_RESOURCE ケーパビリティ (capability) を持たなくてはならない。
ENOMEM
メモリが足りないために、 fork ()は必要なカーネル構造体を割り当てることができなかった。

準拠

SVr4, 4.3BSD, POSIX.1-2001.

  pipe (2) および   wait (2) を参照。

関連項目

  clone (2),   execve (2),  setrlimit (2), unshare (2),  vfork (2),   wait (2),   capabilities (7)