更好地替代 C 中的 exit()、atexit()

Better replacement for exit(), atexit() in C

我是 C 编程新手。我曾经认为使用 exit() 是最干净的进程终止方式(因为它能够删除临时文件、关闭打开的文件、正常的进程终止......),但是当我尝试 man exit 命令时终端(Ubuntu 16.04.5,gcc 5.4.0)我看到了以下行:

The exit() function uses a global variable that is not protected, so it is not thread-safe.

之后,我尝试研究如何更好地替代 exit()(从一开始就改变我的编程行为)。在这样做时,我遇到了 问题,其中提到了 exit() 的副作用,建议正确使用 atexit() 来解决问题(至少部分)。

有一些 cases in which using abort() was preferred over exit(). On top of that, this 问题表明 atexit() 也可能有害。

所以这是我的问题:

what is the best possible way of process terminating

  1. 如果使用单线程,只需使用 exit(),因为您的代码不会使用多线程。
  2. 否则确保除了一个线程之外的所有线程都在最后一个线程之前结束,然后安全地调用 exit() 因为上面的 1.

考虑到 power/hardware 失败随时可能发生,在许多非平凡的多线程中,用用户代码可靠地终止线程是不可能的……极端困难,以及使用内存池等的混乱性质应用程序,最好设计可以在启动时清理临时文件等的应用程序和系统,而不是尝试对关机进行微观管理。

'Clean up all the resources you allocate before you exit' 在课堂或讲座中听起来像是很好的建议,但当面对不断变化的动态系统中的十几个线程、队列和池时,很快就会变成一整条缠绕在你脖子上的信天翁链。

如果可以,如果您 运行 处于非平凡 OS 下,让它完成它的工作并为您清理。它比您的用户代码要好得多。