1

我有一个 shell 程序,其中创建了一个 fork,然后使用两个 if else 语句来分隔父进程和子进程。

我的示例程序在这里,我有几个问题

while(true)
{
    /* read command line input */

    x = fork();

    if( x > 0)
        {
         wait(&status);      
        }
    else
        {
         /* run the exec() command  */
        }
}

从上面的代码中,它会在 fork 之后首先执行哪个语句,父级如何知道子级 exec 命令执行成功或不成功,父级何时停止等待以及在何种条件下以及如何执行。以及 wait(&status) 代码将如何工作。

帮助将不胜感激。

4

3 回答 3

3

叉()。

这应该让您更好地了解 fork() 系统调用的工作原理。

于 2013-04-20T06:36:18.027 回答
2

我们无法决定应该首先执行哪个进程(父进程或子进程)。如果一个孩子已经终止并且是一个僵尸,wait 会立即返回该孩子的状态。vfork() 保证子进程先运行,直到子进程调用 exec 或 exit

于 2013-05-10T09:56:55.713 回答
1

根据POSIX 规范fork运行父进程或子进程没有优先级。所以,事实上,你不能指望一个在另一个之前。

但是,如果您使用的是 Linux,则始终在 fork 之后首先安排子节点。主要是因为实施的原因。因此,父级是在之后启动的。但是,您还必须了解它们一旦启动就会同时运行。请参阅fork 手册页

于 2013-04-20T06:26:41.117 回答