我是C编程的新手。我曾经认为使用exit()
是最干净的进程终止方式(因为它能够删除临时文件、关闭打开的文件、正常地终止进程...),但当我在终端上尝试man exit
命令时(Ubuntu 16.04.5,gcc 5.4.0),我看到了下面这行:
exit()函数使用了一个未受保护的全局变量,所以它不是线程安全的。
之后,我试图研究更好的替换exit()
的方法(从一开始改变我的编程行为)。在做这件事的过程中,我遇到了这个问题,在其中提到了exit()
的副作用,并建议适当使用atexit()
来解决问题(至少部分解决)。
有些情况中,使用abort()
优于exit()
。除此之外,这个问题表明atexit()
也可能有害。
所以我的问题是:
- 是否有一种通用的、更好的进程终止方式(保证像
exit()
那样干净,且在任何情况下都不会对系统造成损害)? - 如果第一个问题的答案是否定的,那么最佳的进程终止方式是什么(包括它们最有用的情况)?
exit()
线程(不)安全的好时机。此外,应对exit-handler
函数和atexit()
的价值持怀疑态度。当exit()
的效果是终止程序时,谁真正关心它是否线程安全呢?仅在特殊情况下 - 可能涉及atexit()
- 才有必要担心它。 - John Bollingerexit()
更好的通用需求,那么这样的功能就已存在。如果exit()
存在一般性问题,它们将被修复。 - Andrew Henle