如何确定应用程序是否已在运行?C便携式Linux/Win
有没有一种方法可以编写一个C代码来确定应用程序的前一个实例是否已经在运行?我需要在Linux和Windows上以可移植的方式检查这一点,这两个版本都使用最新版本的GCC 任何可移植代码的例子都会有巨大的帮助。我现在看到两种选择:如何确定应用程序是否已在运行?C便携式Linux/Win,c,linux,windows,console-application,process-management,C,Linux,Windows,Console Application,Process Management,有没有一种方法可以编写一个C代码来确定应用程序的前一个实例是否已经在运行?我需要在Linux和Windows上以可移植的方式检查这一点,这两个版本都使用最新版本的GCC 任何可移植代码的例子都会有巨大的帮助。我现在看到两种选择: 检查流程列表。在这里,linux有很好的工具,但我不认为同样的功能适用于windows。也许两个都有gnu库,是吗?哪些库或函数 保存并锁定文件。现在,如何以两个系统都能理解的方式做到这一点?一个问题是在哪里保存文件?每个系统的路径树都不同。此外,如果选择了相对路径,两
C语言(不是C++)、控制台应用程序、gcc、linux和windows对于windows,互斥锁工作良好 这篇文章还提到了互斥的一种替代方法
要将应用程序限制为每个用户一个实例,请在用户的配置文件目录中创建一个锁定的文件。C没有内置的功能来检查应用程序是否已在运行,因此,跨平台运行很困难/不可能。但是,在Linux上,可以使用。而且,在Windows上(我在这方面不是很有经验),您可能会发现有帮助。Unixland中的规范方法是让进程将自己的PID写入到已知位置的文件中。如果此文件存在,则程序可以用该文件中的pid检查自己的pid(通过系统调用可用),如果不熟悉,则您知道另一个进程正在运行。不幸的是,如果您将自己限制为C,则在移植时可能会遇到困难。用C++,有Boost的进程,但是在C上,你必须要么:
- Unix(包括Mac OS):打开并在某处创建一个文件。传统上,您也会将当前PID写入此文件。注意:这在NFS上可能不安全;但无论如何,你的选择非常有限。在Linux上,如果您想确保它是本地的并且可以安全地锁定,那么可以使用
路径/dev/shm
- 窗口:打开并锁定一个窗口
对于Windows,考虑基思的答案。我不确定它是否有效,但是,你可以试试。嗨,基思。该目录的完整路径是什么?是否有一个有效的变量?我编辑了这个问题,以解释在两种系统中尝试这样做时的一些疑问。谢谢你的时间!