确保 Linux 中应用程序的单个实例

2023-11-24

我正在 WxPython 中开发 GUI 应用程序,我不确定如何确保在任何给定时间机器上只有应用程序的一个副本正在运行。由于应用程序的性质,多次运行没有任何意义,并且很快就会失败。在 Win32 下,我可以简单地创建一个命名互斥体并在启动时检查它。不幸的是,我不知道 Linux 中有任何工具可以做到这一点。

我正在寻找一些在应用程序意外崩溃时会自动释放的东西。我不想因为我崩溃而给我的用户带来必须手动删除锁定文件的负担。


正确的做法是使用建议性锁定flock(LOCK_EX);在 Python 中,可以在fcntl module.

与 pidfile 不同,当您的进程因任何原因终止时,这些锁总是会自动释放,不存在与文件删除相关的竞争条件(因为文件不需要被删除来释放锁),并且不同的进程不可能继承 PID,从而看似验证了过时的锁。

如果你想要不干净的关闭检测,你​​可以在获取锁后将一个标记(例如你的PID,对于传统主义者)写入文件中,然后在干净关闭之前将文件截断为0字节状态(当锁被持有时) );因此,如果未持有锁并且文件非空,则表明不正常关闭。

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

确保 Linux 中应用程序的单个实例 的相关文章

随机推荐

  • 处理 WPF 中 Winforms 组件的未处理异常

    我的应用程序是用 WPF 构建的 但它包含我们编写的一些 WinForms 组件 当 WinForms 组件之一中的异常未得到处理时 应用程序就会崩溃 我已经实施了DispatcherUnhandledException对于 WPF 事件
  • 为什么 javascript setTimeout() 不能在循环中工作? [复制]

    这个问题在这里已经有答案了 考虑以下代码
  • Jquery:从字符串中删除所有特定的 HTML 标签

    我有一个包含文本和 html 标签字符串的变量 例如 var temp div Some text div p More text span here span p p Even more p 我想删除某种类型的所有标签 咱们来说说全部p
  • EasyMock:模拟对象正在调用实际方法

    我在单元测试中有以下代码片段 ClassToBeMocked mock createMock ClassToBeMocked class I ve statically imported EasyMock mock callMethod T
  • 如何创建警报来检测 DynamoDb 限制已达到特定百分比,然后增加该百分比

    我正在编写一个网络应用程序 该应用程序的流量每天都在稳步增加 我想创建一个警报 可以检测我的读 写限制是否达到一定百分比 例如 80 然后增加该限制 然后我会在午夜再次减少它 我尝试过创建一个警报 平均 似乎有点无用并且始终为 1 0 Su
  • Java 8 拆分字符串并在 Map 内创建 Map

    我有一个像这样的字符串101 1 5 101 2 4 102 1 5 102 2 5 102 3 5 103 1 4 我想将其添加到Map
  • 使用 r 中的 ggplot 将数据框的 n 列绘制为线条

    我正在尝试重新创建 P lya 瓮模型 https en wikipedia org wiki P lya urn model 在 R 中 使用 ggplot 该模型基本上从 瓮 中的 1 个白色球和 1 个黑色球开始 然后随机选择一个球并
  • generic.xaml 文件位于哪里?

    如果你想使用默认的样式 颜色等 你需要从通用 xaml附带的文件Windows应用程序开发工具包NuGet 包 因此问题是 通用 xaml file 你可以找到默认的通用 xaml每个里面Windows应用程序开发工具包NuGet 包文件夹
  • 如何在 Xcode 8 中启用可视内存调试器?

    我将一个项目从以前版本的 Xcode 迁移到 Xcode 8 我想要的是使用新的可视内存调试器 它在新项目中可用 但在我导入的项目中完全缺失 为什么是这样 Visual Memory Debugger 似乎需要 Swift 3 才能工作 我
  • 无需 PIN/密码即可从 PKCS11 智能卡获取证书

    摘要 当在 OpenSC 上使用 JCA over PKCS11 时 提取证书时需要 PIN 我有一个需要使用智能卡签名的应用程序 该智能卡受 OpenSC 支持 因此我使用 Java 内置的 pkcs11 包装器提供程序来使用它 出于功能
  • PKG 生成字节码失败

    当我尝试运行 pkg index js t macOS 时收到此警告 节点 v17 3 1 电子邮件受保护 警告无法为文件 snapshot index js 制作字节码node17 arm64 希望有人能帮忙 我也尝试过使用 b 并得到
  • JMF更换

    JMF 很旧 不能正确支持很多编解码器 这些天我在后台使用 FFMPEG 但我想切换到本机 java 解决方案 如果存在 有人知道当前具有媒体操作功能的开源 Java 项目吗 虽然不是 100 原生 但您也可以使用Xuggler 它是一个开
  • 如何防止文档正文上的点击事件(也许是 Cordova 中的错误?)

    我是一名初学者 尝试使用 Kinetic Js 和 phonegap build 开发手机游戏 我遇到了一个我不知道如何解决的问题 我做了一些测试 我刚刚粘贴了这段代码在这里进入我的index html并将代码发送到音隙构建它从 html
  • 为什么Tomcat不会绑定关闭端口(8005)?

    Tomcat 启动并运行得很好 但从未绑定到 8005 关闭端口 所以 我只能以杀死它的方式来结束它 我正在启动 Tomcat catalina sh start or startup sh 结果是相同的 Server xml 片段
  • 当最终链接隐藏时,下载保留原始文件名的文件

    我需要下载一个文件 将其保存在一个文件夹中 同时保留网站上的原始文件名 url lt http www seg social es prdi00 idcplg IdcService GET FILE dID 187112 dDocName
  • Python xlrd:抑制警告消息

    我在用xlrd处理 Excel 文件 我正在包含许多文件的文件夹上运行脚本 并且正在打印与这些文件相关的消息 但是 对于我运行的每个文件 我还会收到以下 xlrd 生成的错误消息 WARNING OLE2 inconsistency SSC
  • 如何高效地从 HashMap 中查找和插入?

    我想做以下事情 查找一个Vec对于某个密钥 并存储它以供以后使用 如果不存在则创建一个空的Vec为键 但仍将其保留在变量中 如何有效地做到这一点 我自然认为我可以使用match use std collections HashMap Thi
  • Chrome 版本 66:阻止当前来源接收跨站点文档

    在我的本地计算机上 我一直在使用 disable web security user data dir 禁用网络安全 升级到 Chrome 版本 66 后 我开始收到阻止当前来源接收跨站点文档的警告 如何禁用此版本 chrome 的网络安全
  • 使用 ref-qualifiers 成员函数重载的调用不明确

    在编译我的代码时 我发现了一个奇怪的行为G gcc4 8 1 和MinGW4 8 2 与 std gnu 1y旗帜 本着 SSCCE 的精神 我隔离了以下片段 struct C template lt typename X gt auto
  • 确保 Linux 中应用程序的单个实例

    我正在 WxPython 中开发 GUI 应用程序 我不确定如何确保在任何给定时间机器上只有应用程序的一个副本正在运行 由于应用程序的性质 多次运行没有任何意义 并且很快就会失败 在 Win32 下 我可以简单地创建一个命名互斥体并在启动时