当前位置: 首页 > 面试题库 >

如何在C或C ++中创建单个实例应用程序

东门城
2023-03-14
问题内容

您对创建单个实例应用程序有什么建议,以便一次只允许一个进程运行?文件锁,互斥锁还是什么?


问题答案:

一个好的方法是:

#include <sys/file.h>
#include <errno.h>

int pid_file = open("/var/run/whatever.pid", O_CREAT | O_RDWR, 0666);
int rc = flock(pid_file, LOCK_EX | LOCK_NB);
if(rc) {
    if(EWOULDBLOCK == errno)
        ; // another instance is running
}
else {
    // this is the first instance
}

请注意,锁定使您可以忽略陈旧的pid文件(即,您不必删除它们)。当应用程序由于任何原因终止时,操作系统会为您释放文件锁。

Pid文件并不是非常有用,因为它们可能是过时的(该文件存在但该过程没有)。因此,可以锁定应用程序可执行文件本身,而不是创建和锁定pid文件。

一种更高级的方法是使用预定义的套接字名称创建和绑定Unix域套接字。对于应用程序的第一个实例,绑定成功。同样,当应用程序由于任何原因终止时,操作系统将取消绑定套接字。当bind()失败时,应用程序的另一个实例可以connect()并使用此套接字将其命令行参数传递给第一个实例。



 类似资料:
  • 我正在研究NFC应用程序。当我打开应用程序并从NFC标签读取信息时,活动打开哪个注册了意图过滤器,这将打开一个已经打开的应用程序的新实例。如何关闭应用程序的上一个实例或打开应用程序的上一个实例。 请帮帮我,抱歉英语不好。。提前谢谢。

  • 本文向大家介绍C#程序创建一个简单线程,包括了C#程序创建一个简单线程的使用技巧和注意事项,需要的朋友参考一下 为了创建线程,我创建了一个函数- 调用上述函数以创建线程,并创建一个新的ThreadStart委托- 示例 使用以下代码创建一个简单的线程。 输出结果

  • 本文向大家介绍如何在C#中创建StringBuilder?,包括了如何在C#中创建StringBuilder?的使用技巧和注意事项,需要的朋友参考一下 要在C#中创建StringBuilder,代码如下- 示例 输出结果 这将产生以下输出- 示例 让我们看另一个例子- 输出结果 这将产生以下输出-

  • 问题内容: 有时我会看到许多应用程序,例如msn,Windows Media Player等都是单实例应用程序(当用户在应用程序运行时执行时,将不会创建新的应用程序实例)。 在中,我为此使用类,但是我不知道如何在Java中执行此操作。 问题答案: 我在主要方法中使用以下方法。这是我所见过的最简单。

  • 问题内容: 我想构建一个 使用用户名作为参数 的 程序,并创建用户及其主文件夹 (具有一些诸如文件夹之类的硬编码规范,以及诸如用户名之类的安全检查不能是root或现有用户)。 我的应用程序需要创建用户才能授予SSH访问权限。 该程序将使用 sudo 执行。我读过它应该用C或C ++而不是脚本编写,因为脚本很容易被利用。 您能给我 一些建议或好的做法 吗? 我应该使用一些 Pam 库吗?有没有例子?

  • 本文向大家介绍rails创建应用程序实例,包括了rails创建应用程序实例的使用技巧和注意事项,需要的朋友参考一下 安装了Rails框架之后,你同时也得到了一个新的命令行工具:rails。这个工具可以用于构造每个新的Rails应用程序。 为什么我们需要这么一个工具——我是说,为什么不抄起最顺手的编辑器,从头开始编写应用程序的每行代码呢?呃……我们确实可以这样做,但Rails可以在 幕后变很多戏法,