3

我正在运行 linux,只是想知道进程死亡后库的代码实际上会发生什么,而不是通过在它们上运行终止函数或类似的东西来“清理”它们。我见过人们对退出功能实施特定的清理,而其他人则不这样做。

4

2 回答 2

4

这取决于您期望的清理方式。库已打开的所有本地操作系统资源(内存、打开的文件/套接字等)都将被关闭/释放。即使您不调用相关的清理函数(free/delete、fclose/close 等),也会发生这种情况。

但是,非操作系统资源(例如在服务器上启动的事务)不会被自动清理。发生这种情况是因为操作系统不可能知道在这种情况下该做什么。编写良好的服务器将优雅地处理这些情况。

此外,如果程序正常退出,库可以“隐藏”某些清理功能。

于 2013-01-07T07:08:52.870 回答
2

这取决于...

...关于资源类型。

最佳实践

做免费的文件描述符。(但是操作系统为您关闭它们。)

关闭缓冲文件和数据库连接。(但是标准输出缓冲区将在exit(3)或从main()返回时刷新。

但不要在退出前释放分配的内存。这是对时间的极大浪费,并且可能导致回读永远不会使用的页面。

于 2013-02-09T20:10:07.587 回答