有没有办法编写 C 代码来允许我们确定应用程序的先前实例是否已经在运行?我需要在 Linux 和 Windows 上以可移植的方式检查这一点,两者都使用可用的最新版本的 GCC。
任何可移植代码的示例都会有巨大的帮助。我现在看到两个选择:
- 检查进程列表。这里linux有很好的工具,但我认为同样的功能不适用于windows。也许有一些适用于这两个 SO 的 gnu 库?有哪些库或函数?
- 保存并锁定文件。现在,如何以两个系统都能理解的方式做到这一点?一个问题是文件保存在哪里?每个系统的路径树都不同。此外,如果选择相对路径,两个应用程序仍然可以在不同目录中使用不同的锁定文件运行。
谢谢! 贝科。
PS。 SO 有不同的要求,因此如果您知道其中一项而不是另一项,请回答。毕竟,如果没有可移植的“单一”方式,我仍然可以使用#ifdef和建议的代码作为答案。
C 语言(非 C++)、控制台应用程序、gcc、linux 和 windows
最佳答案
不幸的是,如果您将自己限制在 C 语言上,那么您可能很难做到这一点。对于 C++,有 boost interprocess 的 named_mutex ,但在 C 上,您必须:
- UNIX(包括 Mac OS):开放和 flock某处的文件。传统上,您还将当前的 PID 写入此文件。注意:这在 NFS 上可能不安全;但无论如何,你的选择非常有限。在 Linux 上,如果您想确保它是本地的并且可以安全锁定,则可以使用
/dev/shm
路径。 - Windows:打开和锁定 named mutex
关于c - 如何判断应用程序是否已经在运行? C 可移植 Linux/Win,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5589632/