首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何退出子进程- _exit()与exit

如何退出子进程- _exit()与exit
EN

Stack Overflow用户
提问于 2010-02-25 05:22:02
回答 5查看 60K关注 0票数 48

考虑下面的代码片段:

代码语言:javascript
复制
pid_t cpid = fork();

if (cpid == -1) {
    perror("fork");
    exit(EXIT_FAILURE);
}

if (cpid == 0) { // in child
    execvp(argv[1], argv + 1);
    perror("execvp");
    _exit(EXIT_FAILURE);
}

// in parent

如果execvp返回,我应该如何退出子进程?我应该使用exit()还是_exit()?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-25 05:39:20

你绝对应该使用_Exit()exit()调用您使用atexit()添加的函数,并删除使用tmpfile()创建的文件。由于父进程实际上是希望在其存在时完成这些操作的进程,因此您应该调用_Exit(),它不执行这些操作。

请注意,大写为E的_Exit()可能不是您想要直接调用的_exit(2)exit(3)_Exit(3)将为您调用此功能。如果你没有_Exit(3),是的,_exit()就是你想要的。

票数 51
EN

Stack Overflow用户

发布于 2010-02-25 05:48:49

fork()的子类应该总是调用_exit()。

相反,调用exit()是导致挂起的stdio缓冲区被刷新两次的好方法。

票数 16
EN

Stack Overflow用户

发布于 2010-02-25 05:28:01

如果成功,execvp将退出该子进程,因此您不必退出。

在execve失败时,我只需在子进程中使用exit(EXIT_FAILURE);

编辑:经过一些研究,我发现:http://www.unixguide.net/unix/programming/1.1.3.shtml

所以看起来在fork子代中使用_exit()更好,特别是在C++中:p谢谢你的问题,我学到了一些东西:D

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2329640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档