2009-09-09 94 views
0

我想知道什么时候编写应用程序,比如说unix和windows。 如果程序停止(出现异常),我应该释放哪些资源?在Windows和unix中释放资源

头上的物体?数据库连接?文件描述?共享内存?

如果我没有弄错unix释放除共享内存和临时文件以外的所有内容,对不对?

还有什么应该考虑的?

感谢,

回答

2

在任何现代操作系统上,堆,打开的文件和打开的连接都是流程资源,并将在进程终止时释放。如果您明确创建了临时文件或共享内存,那么它们将继续存在,直到您将其明确移除为止,因为这些显然不是特定于进程的。

你可以在Unix文件系统上做的事情是创建/打开你的临时文件,然后立即unlink()它。之后没有人能够打开它,但只要打开文件,仍然可以读取和写入文件。如果您在多个进程中共享临时文件,那么可以在最终进程打开文件后取消链接。这具有在程序终止时不需要删除文件的优点;一旦没有进一步的引用,磁盘空间将自动回收,并且在任何进程中不再打开,即使进程被强制终止。 Windows不允许您在文件关闭之前取消链接,这可能会导致清理变得困难,特别是如果多个进程共享相同的文件。

+0

+1为unlink()技巧。好的Unix'。 – Artelius 2009-09-10 00:51:44

2

这是一个操作系统的工作就是回收系统资源,如果一个程序突然结束(或正确的这个问题)。现在大多数操作系统都做得很好。

你应该更关心的是腐败和数据丢失。通过保存文件可能会中途退出程序?可能会丢失一些数据吗?你的数据库是否处于不一致的状态?您正在与其他软件进行通信吗?是否会挂起/崩溃?

另外考虑一下你的程序将会失败的原因,它们的可能性以及处理它们会花多少努力。