考虑下面的代码片段:
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()?
发布于 2010-02-25 05:39:20
你绝对应该使用_Exit()。exit()调用您使用atexit()添加的函数,并删除使用tmpfile()创建的文件。由于父进程实际上是希望在其存在时完成这些操作的进程,因此您应该调用_Exit(),它不执行这些操作。
请注意,大写为E的_Exit()可能不是您想要直接调用的_exit(2)。exit(3)和_Exit(3)将为您调用此功能。如果你没有_Exit(3),是的,_exit()就是你想要的。
发布于 2010-02-25 05:48:49
fork()的子类应该总是调用_exit()。
相反,调用exit()是导致挂起的stdio缓冲区被刷新两次的好方法。
发布于 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
https://stackoverflow.com/questions/2329640
复制相似问题