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

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

回答:

一个好的方法是:

#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()并使用此套接字将其命令行参数传递给第一个实例。

以上是 如何在C或C ++中创建单个实例应用程序 的全部内容, 来源链接: utcz.com/qa/405291.html

回到顶部