0

我搜索了答案,但我发现的所有线程似乎都建议使用另一种方法来终止子进程:_Exit() 函数。

我想知道是否使用“return 0;” 真正终止子进程?我在我的程序中测试了它(我在父进程中有 waitpid() 来捕获子进程的终止),它似乎工作得很好。

那么有人可以确认这个问题吗?return 语句是否真正终止了类似于 exit 函数的进程,或者它只是发送一个信号,指示调用进程“完成”,而进程实际上仍在运行?

在此先感谢,丹

示例代码:

pid = fork()

if (pid == 0) // child process
{
   // do some operation
   return 0; // Does this terminate the child process?
}
else if (pid > 0) // parent process
{
   waitpid(pid, &status, 0);
   // do some operation
}
4

1 回答 1

0

在 main 函数中使用 return 语句将立即终止进程并返回指定的值。该过程完全终止。

int main (int argc, char **argv) {
    return 2;
    return 1;
}

这个程序永远不会到达第二个 return 语句,并且值 2 被返回给调用者。

编辑 - 叉发生在另一个函数内的示例

但是,如果 return 语句不在 main 函数中,则子进程将不会终止,直到它再次向下进入 main()。下面的代码将输出:

Child process will now return 2
Child process returns to parent process: 2
Parent process will now return 1

代码(在 Linux 上测试):

pid_t pid;

int fork_function() {
    pid = fork();
    if (pid == 0) {
        return 2;
    }
    else {
        int status;
        waitpid (pid, &status, 0); 
        printf ("Child process returns to parent process: %i\n", WEXITSTATUS(status));
    }
    return 1;
}

int main (int argc, char **argv) {
    int result = fork_function();
    if (pid == 0) {
        printf ("Child process will now return %i\n", result);
    }
    else {
        printf ("Parent process will now return %i\n", result);
    }
    return result;
}
于 2013-10-13T20:45:34.820 回答