如何防止程序二次运行?
在win,可以设置共享信号量。用Qt可以设置共享量;
但我想直接用 gnu c++ (标准C、C++库),如何实现防止二次运行?
网上有许多介绍的 写个标记文件,启动时检查文件是否存在的(异常中止呢?),与有查进程名的(进程改名、改路径呢?),都觉得不太好。
mini_peng 发表于 2020-10-19 15:34
在win,可以设置共享信号量。用Qt可以设置共享量;但我想直接用 gnu c++ (标准C、C++库),如何实现防止二 ...
我在做服务器时有这个需求。
打开服务端口,如果打开成功了,就是已经有服务在运行了。
写个pid.txt, 记录启动的进程号, 进程结束之后删掉. 标准C、C++没有这个功能,Linux上可以使用 lockf
#define _XOPEN_SOURCE 500
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
int
main(void)
{
int ret;
int fd;
fd = open("lockf.txt", O_CREAT | O_RDWR, S_IRUSR | S_IWUSR);
ret = lockf(fd, F_TLOCK, 0);
if (ret < 0) {
perror("lockf");
return 1;
}
printf("sleep(60)\n");
sleep(60);
return 0;
}
页:
[1]