我正在运行 linux,只是想知道进程死亡后库的代码实际上会发生什么,而不是通过在它们上运行终止函数或类似的东西来“清理”它们。我见过人们对退出功能实施特定的清理,而其他人则不这样做。
问问题
112 次
2 回答
4
这取决于您期望的清理方式。库已打开的所有本地操作系统资源(内存、打开的文件/套接字等)都将被关闭/释放。即使您不调用相关的清理函数(free/delete、fclose/close 等),也会发生这种情况。
但是,非操作系统资源(例如在服务器上启动的事务)不会被自动清理。发生这种情况是因为操作系统不可能知道在这种情况下该做什么。编写良好的服务器将优雅地处理这些情况。
此外,如果程序正常退出,库可以“隐藏”某些清理功能。
于 2013-01-07T07:08:52.870 回答
2
这取决于...
...关于资源类型。
最佳实践
做免费的文件描述符。(但是操作系统会为您关闭它们。)
关闭缓冲文件和数据库连接。(但是标准输出缓冲区将在exit(3)或从main()返回时刷新。
但不要在退出前释放分配的内存。这是对时间的极大浪费,并且可能导致回读永远不会使用的页面。
于 2013-02-09T20:10:07.587 回答