mini_peng 发表于 2020-10-19 15:34

如何防止程序二次运行?


在win,可以设置共享信号量。用Qt可以设置共享量;
但我想直接用 gnu c++ (标准C、C++库),如何实现防止二次运行?

网上有许多介绍的 写个标记文件,启动时检查文件是否存在的(异常中止呢?),与有查进程名的(进程改名、改路径呢?),都觉得不太好。

yulihua49 发表于 2021-02-07 12:56

mini_peng 发表于 2020-10-19 15:34
在win,可以设置共享信号量。用Qt可以设置共享量;但我想直接用 gnu c++ (标准C、C++库),如何实现防止二 ...

我在做服务器时有这个需求。
打开服务端口,如果打开成功了,就是已经有服务在运行了。

solu 发表于 2021-02-09 11:36

写个pid.txt, 记录启动的进程号, 进程结束之后删掉.

mymbsd 发表于 2022-04-21 10:37

标准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]
查看完整版本: 如何防止程序二次运行?