4

私の教授は、C で次の例を示しています。

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>

int main() {
   pid_t pid;

   /* fork another process */
   pid = fork();
   if (pid < 0) { /* error occurred */
         fprintf(stderr, "Fork Failed");
         return 1;
   }
   else if (pid == 0) { /* child process */
         execlp("/bin/ls", "ls", NULL);
   }
   else { /* parent process */
        /* parent will wait for the child */
        wait (NULL);
        printf("Child Completed its execution\n");
   }

return 0;
}

コンパイルして実行しました。このコードで奇妙な動作が見られました。

「ls」プログラム/コマンドの結果は、else if 条件にあるだけでなく、else にある文字列「Child Completed its execution\n」も出力されます。

これは奇妙な動作ではありませんか?

4

2 に答える 2

5

いいえ、あなたはそれをフォークしました。2 つのプロセスが実行されています。1 つは ls を報告し、もう 1 つは printf() を報告しました。

具体的には、子/フォークされたプロセスが /bin/ls を実行し、親が printf() を呼び出したという出力が表示されます。

于 2013-01-31T17:05:08.030 に答える
2

これforkは、コード内の同じポイントから実行を継続する子プロセスを作成するためですが、0 に設定されています。子プロセスがコマンドを実行している間にpid、行を実行している親プロセスが表示されています。printfls

于 2013-01-31T17:05:32.320 に答える