您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在传统的Linux fork-exec中使用_exit()和exit()有什么区别?

在传统的Linux fork-exec中使用_exit()和exit()有什么区别?

当失败时,您应该使用_exit(或它的同义词_Exit)中止子程序exec,因为在这种情况下,子进程可能会通过调用atexit处理程序,调用其信号处理程序和/或使其干扰父进程的外部数据(文件)。冲洗缓冲区。

出于同样的原因,您还应该_exit在任何不执行的子进程中使用exec,但是这种情况很少见。

在其他所有情况下,只需使用即可exit。正如您自己部分指出的那样,Unix / Linux中的 每个 进程(一个除外init)都是另一个进程的子进程,因此_exit在每个子进程中使用意味着exit在之外没有用init

switch (fork()) {
  case 0:
    // we're the child
    execlp("some", "program", NULL);
    _exit(1);  // <-- HERE
  case -1:
    // error, no fork done ...
  default:
    // we're the parent ...
}
其他 2022/1/1 18:18:34 有597人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶