fork() 以降の子プロセスはどこで実行を開始しますか?

fork() 以降の子プロセスはどこで実行を開始しますか?

私はUNIXプログラミングを学びようとしていますが、fork()に問題がありました。私はfork()が現在実行中のプロセスと同じプロセスを生成することを知っていますが、どこで始まりますか?たとえば、コードがあれば

int main (int argc, char **argv)
{
    int retval;
    printf ("This is most definitely the parent process\n");
    fflush (stdout);
    retval = fork ();
    printf ("Which process printed this?\n");

    return (EXIT_SUCCESS);
}

出力は次のとおりです

This is most definitely the parent process  
Which process printed this?  
Which process printed this?

私はこれがfork()同じプロセスを生成すると思ったので、最初はこのプログラムでfork()呼び出しが永久に再帰的に呼び出されると思いました。生成された新しいプロセスが呼び出しfork()後に開始されると思いますかfork()

親プロセスと子プロセスを区別するために次のコードを追加すると、

if (child_pid = fork ())
    printf ("This is the parent, child pid is %d\n", child_pid);
else
    printf ("This is the child, pid is %d\n", getpid ());

fork()が呼び出された後、子プロセスはどこで実行を開始しますか?

ベストアンサー1

新しいプロセスは呼び出し時に生成され、fork()親プロセスのように返される場所から始まります。 (に保存したretval)戻り値はfork()次のとおりです。

  • サブプロセスで0
  • 親プロセスの子プロセスのPID
  • 失敗した場合、親は-1です(当然子はありません)。

fork()テストコードはうまく動作します。 inの戻り値を保存し、child_pidそれを使用してifゼロであることを確認します(エラーは確認しません)。

おすすめ記事