更好地替换C中的exit()和atexit()

Adh*_*rov 7 c linux gcc exit atexit

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

exit()函数使用不受保护的全局变量,因此它不是线程安全的。

之后,我尝试进行一些有关更好地替代的研究exit()(从一开始就改变我的编程行为)。虽然这样做,我面对这个问题,其中的副作用exit()被提及,并建议使用atexit()适当地(部分至少)解决该问题。

在某些情况下,使用abort()优先于exit()。最重要的是,这个问题表明这atexit()可能也是有害的。

所以这是我的问题:

  • 是否有任何通用且更好的过程终止方式(可以保证像这样清洁,exit()并且在任何情况下都不会损害系统)?
  • 如果第一个问题的答案为“否!”,那么终止过程的最佳可能方式是什么(包括最有用的情况)?

alk*_*alk 5

进程终止的最佳方式是什么

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