Fork は新しいプロセスを作成します。新しく作成されたプロセスは、親プロセスの後続のコードのコピーです。通常、子プロセス内で独立したコードを実行することもできます。
getpid を使用して、現在のプロセスが子プロセスであるか親プロセスであるかを判断します。
次の例を考えてみましょう。
引用した内容は以下の通りです。
#include #include #include int main() { pid_t pid; 静的 int n = 0; printf("フォーク!n"); スイッチ (pid = fork()) { ケース-1: { /* ..pid.-1.fork.... */ /* ...... */ /*.....*/ perror("フォークが失敗しました!"); 壊す; } ケース0: { /* pid.0.... */ printf("[子供]私は子供です!n"); printf("[子]getpid=[%d]n", getpid() ); printf("[子]pid=[%d]n", pid ); 壊す; } デフォルト: { /* pid..0.... */ printf("[親]私が親です!n" ); printf("[親]getpid=[%d]n",getpid() ); printf("[親]pid=[%d]n",pid ); 壊す; } } printf("n=[%d]n", n++); 0を返します。 } |
この例は Linux 上で gcc を使用してコンパイルされており、実行結果は次のとおりです。
引用した内容は以下の通りです。
フォーク! [子供]私は子供です! [子]getpid=[7422] [子]pid=[0] n=[0] [親]私は親です! [親]getpid=[7421] [親]pid=[7422] n=[0] |