如果进程被终止,写入 write() 的数据是否会刷新到磁盘?

2024-01-24

我正在使用一个程序qdbm http://sourceforge.net/projects/qdbm/维护键值存储(qdbm 链接到程序中)。在某些情况下,该进程会在 qdbm 数据库中放入一个值,然后通过调用外部 init 脚本(通过 system())自行重新启动。看来有时写入 qdbm 数据库的值实际上并没有保留,我想知道这是否可能是由于在通过 SIGTERM 终止进程之前数据没有刷新到磁盘。

由于 qdbm 确实使用 write() 系统调用进行写入(相对于 fwrite() 库函数),我认为 Linux 内核应该知道最终将所有内容刷新到磁盘(系统不会重新启动,只是进程)。此外,在进程被终止之前,close() 确实会在 FD 上被调用。

那么,我的理解是否正确,或者我是否需要在某处添加一些 fdatasync() 或类似的调用?此处有关语义的权威参考文献的链接也将受到赞赏。


通常,应用程序已经将数据写入内核缓冲区write()不会受到应用程序退出或以任何方式被终止的影响。退出或被杀死会隐式关闭所有文件描述符,因此应该没有区别,内核将在之后处理刷新。所以不行fdatasync()或类似的细胞是必要的。

有两个例外:

  • 如果应用程序使用用户态缓冲(不调用write()系统调用,而是将数据缓存在用户空间缓冲区中,fwrite()),除非执行正确的用户空间文件关闭,否则这些缓冲区可能不会被刷新 - 被 SIGKILL 杀死肯定会导致您丢失这些缓冲区的内容,

  • 如果内核也死掉(断电、内核崩溃等),您的数据可能会错过从内核缓冲区写入磁盘的机会,然后就会丢失。

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

如果进程被终止,写入 write() 的数据是否会刷新到磁盘? 的相关文章

随机推荐

  • RestKit - 离线存储后发送添加/编辑/删除的对象

    将 RestKit 与 Core Data 结合使用 当用户在没有互联网连接的情况下添加 编辑或删除对象时 我通过标记对象并将其与 Core Data 一起保存来提供离线支持 如果互联网再次可用 我将获取所有添加 编辑 删除的对象 将它们保
  • 为餐厅菜单创建点引线

    我正在尝试创建一个带有点领导者的餐厅菜单 但我遇到了麻烦 我正在寻找的格式是下面发布的图片 有人可以帮我解决这个问题吗 HTML div class dotted ol li h2 Test h2 p span Test 2 span sp
  • php如何限制用户每天登录一次以上

    有没有办法限制用户每天登录次数不超过一次 这在 PHP 中可能吗 如果是这样 你能指导我该怎么做吗 在我的数据库中 我有用户名和密码字段以及时间戳 我还应该添加什么 我尝试过这个 但问题是我不希望它受到限制IP并且应该尊重用户
  • 合并两个 xml 文件 LINQ

    我在合并两个 XML 文件时遇到问题 我将这两个文件加载到两个对象中 找到两个对象中的目标节点并尝试合并 这是一个示例 var nodes1 XResult1 Descendants subject var nodes2 XResult2
  • 静态只读字段初始值设定项与静态构造函数初始化

    以下是初始化静态只读字段的两种不同方法 这两种方法有区别吗 如果是 什么时候应该优先选择其中一个 class A private static readonly string connectionString WebConfiguratio
  • JPA。 JoinTable 和两个 JoinColumn

    我需要创建表 PORTATION MODEL SET 我需要从表 portation 创建两个密钥 从表phone model 创建一个密钥 我有代码 Entity Table name PORTATION SecondaryTable n
  • 为什么 Android Lint 在显式使用 Locale.US 时会警告 String.format 使用默认区域设置?

    我最初打电话String format这边走 return String format s f f anotherString doubleA doubleB 这使得 Android Lint 生成此警告 隐式使用默认区域设置是错误的常见来
  • 在 MongoDB 中,如何索引数组中的嵌入对象字段?

    多键的 mongodb 文档给出了查询数组中嵌入对象字段的示例 http www mongodb org display DOCS Multikeys http www mongodb org display DOCS Multikeys
  • 可垂直滚动的 GroupBox

    我正在使用创建一个应用程序Windows 申请表 我基本上是 C 和 Visual Studio 的新手 从昨天开始就一直在使用它 到目前为止 我已经成功创建了一个简单的表单 如屏幕截图所示 My Form 背景 细节 我正在使用框中提供的
  • 通过NotificationListenerService读取Google地图通知

    是否可以读取用户移动时定期显示的 Google 地图导航通知 例如 定期更新距下一回合的剩余距离 我尝试使用NotificationListenerService来实现此目的 但是当我尝试使用getNotifications getExtr
  • 使用react.js 在单页应用程序中导航

    我正在使用 React 和 Backbone 构建一个单页面应用程序 并试图找出处理应用程序中内容之间导航的最佳实践 我的应用程序将有一个侧边栏 其中包含链接 例如 照片 和 设置 侧边栏始终存在 因此单击 设置 后 我希望在不重新加载整个
  • TemporaryKey.pfx 出现问题 我没有密码

    我的一个客户有一个问题 他有一位 Microsoft CRM 开发人员 但他离开了 现在该项目仍未完成 我已经下载了自定义应用程序的源代码 并且我不想继续开发 我尝试过 ClickOne 部署 它会弹出一个与 myapp Temporary
  • ASP.NET Identity 2.1 将 PK 更改为 int 错误

    我已经按照中所述更改了 PKhttp www asp net identity overview extensibility change primary key for users in aspnet identity http www
  • 如何标记扩展宏(local :dir )?

    我知道我的标题令人困惑 因为tokenize命令被指定为一个字符串 我有许多文件夹 其中包含大量 独立的 命名不当的 Excel 文件 其中大部分是从网站上抓取的 手动选择不方便 需要依赖Stata扩展宏功能local dir阅读它们 我的
  • 如何像 Pinterest/Evernote 一样从 UICollectionView 过渡到 UIViewController

    我有一个 UICollectionView 当选择一个项目时 我希望它能够全屏显示动画 因此它会从单元格大小过渡到全屏并成为 UIViewController Pinterest 和 Evernote 都有这种行为 点击单元格会将单元格转换
  • jQuery 性能 - 按数据属性还是按类选择?

    哪个更快 为什么 选择 div 满足插件需求 div data something or div something 我倾向于前者 因为它 更干净 基于这个问题 https stackoverflow com questions 61795
  • Jquery - event.target 和 this 关键字之间的区别?

    有什么区别event target and this 假设我有 test click function e thisEventOb e target this this alert thisEventObj alert this 我知道警报
  • 您可以将 HTML 图像标签的 src 属性设置为控制器方法吗?

    我知道你可以做到这一点 img src http some svg on the web 但是如果我有一个带有注释的控制器方法怎么办 ResponseBody RequestMapping value getSVG public Respo
  • pygtk导入gtk错误

    我下载了中描述的所有内容 pygtk http www pygtk org 用于安装 一切都很顺利 直到我尝试打字 import gtk 它抛出了一个ImportError如下 from gtk import gtk ImportError
  • 如果进程被终止,写入 write() 的数据是否会刷新到磁盘?

    我正在使用一个程序qdbm http sourceforge net projects qdbm 维护键值存储 qdbm 链接到程序中 在某些情况下 该进程会在 qdbm 数据库中放入一个值 然后通过调用外部 init 脚本 通过 syst