0

我在 Tannenbaum 关于 MINIX 的书中看到了一个精简的 shell 程序。

while(1) {
 read_command(command, parameters);
 if (fork() != 0) 
      wait(&status);    /* parent code */
 }
 else {
      execve(command, parameters, 0);  /* child code */
 }
}

当无限循环执行第一次迭代时,fork() 将返回 0 表示它创建了一个子进程,当它执行第二次时,fork() 不会创建一个新的子进程吗?wait(&status) 将如何执行?

我不熟悉操作系统的工作/构建方式。

谢谢!

4

1 回答 1

1

fork立即创建一个新进程,因此两个进程都看到fork返回,但返回值不同。在父进程中,返回值是子进程的非零进程ID,所以父进程执行wait。在子进程中,fork返回 0,因此子进程执行execve.

于 2014-03-26T12:09:31.463 回答