gpt4 book ai didi

c - 有关子进程终止的更多信息?

转载 作者:行者123 更新时间:2023-11-30 17:46:19 25 4
gpt4 key购买 nike

我在谷歌上搜索答案,但我发现的所有线程似乎都建议使用另一种方法来终止子进程:_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
}

最佳答案

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

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

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

编辑 - fork 发生在另一个函数内部时的示例

但是,如果 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;
}

关于c - 有关子进程终止的更多信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19349941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com