释放Windows和unix中的资源

时间:2009-09-09 11:25:20

标签: windows unix

我想知道我编写应用程序的时间,比如unix和windows。 如果程序停止(得到异常),我应该释放什么资源?

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

如果我没弄错,unix会从共享内存和临时文件中释放所有内容,对吗?

是否还有其他需要考虑的因素?

谢谢,

2 个答案:

答案 0 :(得分:2)

如果程序突然(或正确地)结束,则回收系统资源是操作系统的工作。如今,大多数操作系统都能很好地完成这项工作。

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

还要考虑您的计划失败的原因,它们的可能性以及正确处理它们的努力程度。

答案 1 :(得分:2)

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

你可以在Unix文件系统上做的事情是创建/打开你的临时文件,然后立即unlink()它。之后没有其他人能够打开它,但只要你打开文件,你仍然可以读取和写入文件。如果要在多个进程之间共享临时文件,则可以在最终进程打开文件后取消链接。这样做的好处是不需要在程序终止时删除文件;一旦没有进一步的引用就会自动回收磁盘空间,并且在任何进程中它都不再打开,即使进程被强行杀死也是如此。 Windows不允许您取消链接文件,直到所有进程都关闭它,这可能使清理变得困难,尤其是在多个进程共享同一文件的情况下。