RAII 和系统资源清理

2023-12-23

RAII 是资源清理的一个很好的解决方案。然而,RAII 基于堆栈展开。如果进程异常终止,堆栈将不会被展开。这意味着 RAII 在这种情况下不起作用。对于进程生命周期的资源来说,这没什么好担心的,但是对于文件系统生命周期或者内核生命周期的资源,比如文件、消息队列、信号量、共享内存,这就会是一个问题。

如何以可靠的方式清理系统(文件系统和内核)资源?

例子: 共享文件将由“主”进程创建,并由“从”进程使用。共享文件应由计划中的“主”进程删除。是否存在一种方法可以做到这一点。

显然,共享文件创建后无法立即取消链接。如果是这样,其他进程将无法“查看”该文件。


你的问题没有完美的答案。您大多只是尽最大努力减轻影响,因此“异常终止留下垃圾”的情况很少见。

首先,编写尽可能健壮的程序以防止进程异常终止。

其次,尽可能依赖内核机制。在共享文件示例中,如果您只是谈论一个“主”进程和一个“从”进程使用文件进行通信,那么您可以在两个进程打开文件后立即取消链接该文件。该文件将继续存在并可供两个进程读写,直到两个进程都将其关闭,此时内核将自动回收存储。 (即使它们都异常终止。)

当然,下次服务器启动时,它可以清理上一次运行留下的任何垃圾,假设一次只存在一个垃圾。

通常的最后机会机制是让“清理”进程定期运行以(例如)清除 /tmp。

但你所问的问题从根本上来说是很难的。任何负责处理另一个异常终止的进程本身都可能异常终止。 “谁监视观察者?”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RAII 和系统资源清理 的相关文章

  • 如何检测系统日期回滚?

    如何检测用户何时回滚系统日期 使用情况是为了防止规避许可 程序需要检测在未运行时发生的回滚 好吧 您可以在程序中使用嵌入式数据库 其中每隔一段时间就会插 入一个加密的系统日期 如果您发现 较新 的日期早于之前的某个日期 则可以看出有人更改了
  • RESTful 资源和正交资源问题

    如果我使用的 3 层应用程序具有通过 HTTP 访问的中间层中的面向 RESTful 资源的服务 那么向 UI 层提供正交资源的最佳方式是什么 一个例子是 用户 资源 它具有一个国家 地区的字段 属性 现在在 UI 层中编辑用户时 我希望能
  • 寻找提供 django 模板的资源[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我对 django 和 python 非常熟悉 但我对网页设计的 视觉 方面很糟糕 即使经过相当多的谷
  • 如何打开给定文件的用户系统首选编辑器?

    我试图弄清楚如何打开给定文件的系统首选编辑器 假设我们有一个用 Java 编写的文件管理器 用户转到文件夹并查看文件列表 并且 例如 有一个文件Icon jpg 用户双击文件名 文件将在系统的首选编辑器 即 Gimp 中打开 主要问题是 如
  • Distribution Manifest.mf 中的单个点(“.”)是什么意思?

    最近我对 Manifest mf 文件中的类路径有点困惑 所以我想要的是将一些properties files从我的distribution jar中外包出来 并将它们放在它旁边 而不更改java source files 下面的例子 此时
  • 资源、放置它们的位置以及如何在 C# 中引用它们

    我已经使用 C 和其他编程语言有一段时间了 很遗憾地说我不熟悉有关在哪里放置程序图标等资源以及如何在代码中引用它们的标准 具体来说 对于 C Windows 窗体应用程序 将我的图标资源放在哪里比较合适 以及将它们放在正确的位置后引用它们的
  • 将多个同名资源添加到 Xcode for iPhone

    是否可以在资源组中使用图像的双重名称 谢谢 您可以拥有多个同名资源 只要 1 它们不在同一目录中 并且 2 您已通过引用将资源添加到您的 Xcode 项目中 1 因为任何目录都不能包含两个同名的文件 2 因为 Xcode 尊重通过引用添加的
  • 是否可以在不同的类中编写/包装异常处理组件(try、catch)?

    这是关于将异常处理逻辑包装在某种类中 在写c 的时候 代码中 很多时候我们需要根据客户端抛出的异常来捕获许多类型 变体 这导致我们在 catch 子句中 多次 编写类似类型的代码 在下面的示例中 我编写了 function 它可以以多种可能
  • 在 php 中运行 windows 命令

    是否可以从 php 运行 Windows 命令行代码 我的Windows命令行代码是
  • 为什么“System.out.println”在 Android 中不起作用?

    我想在控制台中打印一些内容 以便我可以调试它 但由于某种原因 我的 Android 应用程序中没有打印任何内容 那我该如何调试呢 public class HelloWebview extends Activity WebView webv
  • 频繁创建类的短期新实例是否效率低下?

    我有一个 C 程序 可以跟踪玩家在游戏中的位置 在这个程序中 我有一个名为 Waypoint X Y Z 的类 它代表游戏地图上的一个位置 在我生成的线程之一中 我不断检查玩家与某个目标航路点的距离 在 while true 循环中非常快速
  • 如何将图像文件从文档目录上传到iphone中的php服务器

    我目前正在开发画廊类的 iPhone 应用程序 根据我的要求 我需要将所有相机捕获的图像存储到文档目录中 文档文件夹中有一些 10 20 个图像文件 之后我必须使用单个 php url 将应用程序资源文档文件夹推送到服务器上 我已附加屏幕截
  • 如何模拟客户端和服务器之间的套接字断开连接(在 Windows 上)?

    我已经实现了一种 心跳解决方案 我想看看在实际情况下网络 故障 时会发生什么 特别是当套接字上没有流量时发生这种情况 问题 我只有一台电脑 我在windows java上 我想简单地拔掉网线 停用网卡不会影响这两个进程 因为它们在同一个盒子
  • Eclipse CDT - 将静态资源文件复制到 bin_dir

    所以我的问题是 我在 Eclipse 3 5 上的 CDT 6 0 中有一个 C 项目 现在有一个静态资源文件 log4cxx 的 properties 需要复制到构建文件夹 该文件在运行时访问以配置 log4cxx 子系统 并且它需要与可
  • 如何在 MVVM 视图模型中指定资源?

    假设我想显示对象列表 其中每个对象应该有一个名称和一个合适的图像 例如带有图标的菜单项 或带有文本和图像的按钮 所有示例和程序都将视图模型中的图像公开为 PNG 文件的路径 然后绑定Source of an Image对此 但是如果我想使用
  • 从jar中读取资源文件

    我想从我的 jar 中读取资源 如下所示 File file file new File getClass getResource file txt toURI BufferedReader reader new BufferedReade
  • 如何将 try-with-resources 与 if 语句一起使用?

    我有简单的代码 try FileReader file new FileReader messageFilePath BufferedReader reader new BufferedReader file String line whi
  • 访问 java jigsaw 模块中的资源文件[重复]

    这个问题在这里已经有答案了 我正在尝试从项目中的类访问 Eclipse 项目中的文件 我需要将该项目声明为 jigsaw 模块才能从其他项目访问它 但是通过这样做 我无法再访问项目中的 example png 等文件 这是我的项目结构 pr
  • 如何使用 System.out.println 以十六进制打印字节?

    我已经声明了一个字节数组 我使用的是 Java byte test new byte 3 test 0 0x0A test 1 0xFF test 2 0x01 如何打印数组中存储的不同值 如果我使用 System out println
  • 如何使用 Spring Resource.groovy 正确注入 Grails 服务

    使用 Grails 2 2 1 我定义了以下 Grails 服务 package poc class TestService def helperService class HelperService 我已经用过TestService如下

随机推荐

  • Azure 网站和 Azure Web 角色之间有什么区别

    新的和新的有什么实质性的区别 Azure 网站 https www windowsazure com en us home scenarios web sites 以及 ASP NET MVC 应用程序的传统 Azure Web 角色 我为
  • 返回这个而不是 void 有什么缺点吗?

    假设不是返回 void 方法 而是返回对该类的引用 即使它没有任何特定的语义意义 在我看来 它会给你更多关于如何调用方法的选择 允许你以类似流畅界面的风格使用它 而且我真的想不出任何缺点 因为你不需要做任何事情与返回值 甚至存储它 因此 假
  • git:有类似每个分支标签的东西吗?

    我有一些历史重写要做 为此我想暂时保持我原来的树完好无损 然而 重写的树也应该复制以前使用的标签 有没有比例如更少的手动选项在标签名称前面添加分支名称 不 git 中没有像每个分支标签那样的东西 所有分支和标签都只是 Git 中的引用 re
  • 排序算法值得在这里实施吗?

    我有一个正整数列表 我想将 3 个最大值存储在变量中h1 h2 and h3 其余值无关紧要 我考虑用一个int and realloc当内存被填满时 先对其进行排序 然后采用合适的排序算法 但这真的值得吗 因为我真的不需要对整个数组进行排
  • 如何检查 Java 中的字符串是否已到达末尾?

    我不想通过使用正式的方式来做到这一点for循环遍历字符串的所有元素 特定次数 字符串的长度 Java 中是否有任何字符始终位于每个字符串的末尾 就像 C 中的字符一样 您有两个基本选择 String myString ABCD for ch
  • 程序集版本“.001”变为“.1”

    在 WinForms 中我有一个 AssemblyVersion assembly AssemblyVersion 01 01 01 002 然而 当启动屏幕出现时 它完全忽略显示的零 1 1 1 2 作为非常不方便的版本 因为稍后我实际上
  • Python OS X - 从文件中获取“添加日期”信息

    你好 这是我的第一篇文章 我开始做一些编码Python今天在 OS X 上 我注意到 OS X 有这样的东西date added这是文件放入指定文件夹的时间 我正在尝试将该日期作为timestamp 但是没有一种类型有效 我已经尝试了我所知
  • iPhone 上的 HTML5 视频元素有边框

    我最近一直在构建一个应用程序 并在开始时播放加载动画 只是一个 mp4 视频 出于美观目的 除了 iPhone 之外 它在任何地方都可以正常工作 问题在于 视频的某些部分周围有一条灰线 每边并不相同 如果我尝试对页面进行屏幕截图 则线条将不
  • Pandas.groupby.apply() 中的内存泄漏?

    我目前正在使用 Pandas 进行一个 csv 源文件大约 600mb 的项目 在分析过程中 我将 csv 读入数据帧 对某些列进行分组并对分组的数据帧应用一个简单的函数 我注意到在此过程中我进入了交换内存 因此进行了基本测试 我首先在 s
  • Android 应用程序可以在模拟器中运行,但不能在设备中运行

    我使用 android 1 6 api 4 创建了一个 android 应用程序 android minSdkVersion 是 3 我使用的模拟器运行这个应用程序是2 2 它在模拟器中工作正常 然后我将其安装到 htc Hero andr
  • 为什么 Blazor 应用程序中的 XML 验证在本地主机上和作为 Azure 静态 Web 应用程序给出不同的消息?

    edit我做了一个简化的回购协议https github com GilShalit XMLValidation https github com GilShalit XMLValidation 我正在 Blazor WebAssembly
  • 如何将 hset 与 django-redis-cache 一起使用?

    我是 django redis 的新手 我开始熟悉 heroku redis 插件 但是 我只能使用set and get 当我尝试使用其他方法时 例如hset 我收到此错误 RedisCache object has no attribu
  • Android Studio 很慢

    我有一个项目 里面有大约 20 个模块 Gradle clean 大约需要 5 分钟 同样 如果我添加一个新模块 gradle 更新项目需要超过 5 分钟 不依赖于外部库 依赖关系仅存在于项目内部的几个模块之间 我有相同的项目 没有 gra
  • 如何获取工作流活动 (SharePoint) 中的上下文项

    我正在为 sharepoint 工作流编写自定义活动 但我不知道如何使用当前工作流项目 SPWeb 或 SPSite I see http blogs microsoft co il blogs davidbi archive 2008 0
  • htaccess如何将子目录重定向到外部URL

    I tried 301 Redirect Old File Redirect 301 www mydomain com subdirectory http newurl com 但这让我进入了 newurl com subdirectory
  • Android 2.3 中出现“无对等证书”错误,但 4 中则没有

    得到 javax net ssl SSLPeerUnverifiedException No peer certificate error 在运行 Android 2 3 的模拟器中 但在 4 中则不然 在 4 中 它运行得很好 我正在尝试
  • varchar 的 DbString、IsFixedLength 和 IsAnsi

    我是 Dapper 的新手 想知道为什么当我的代码在没有它的情况下运行时会出现以下建议 Ansi 字符串和 varchar https github com StackExchange Dapper ansi strings and var
  • MBCS 编码未知

    我正在尝试在 Python 中打开带有 MBCS 编码的文件 但出现错误 如果我写 fileIN open filename r encoding mbcs I get Traceback most recent call last Fil
  • 安装.NET Core Runtime和SDK后需要重启吗?

    我们即将在生产环境中部署 netcore 2 0 应用程序 但我们需要首先安装 NET Core 运行时和 SDK 安装是否需要重启才能生效 既然是生产 我们不希望这种情况发生 我们安装了以下内容here https www microso
  • RAII 和系统资源清理

    RAII 是资源清理的一个很好的解决方案 然而 RAII 基于堆栈展开 如果进程异常终止 堆栈将不会被展开 这意味着 RAII 在这种情况下不起作用 对于进程生命周期的资源来说 这没什么好担心的 但是对于文件系统生命周期或者内核生命周期的资