Linux-让程序不能多次运行

2025-09-18 08:33:14 / 五人足球世界杯

1、因为守护进程是长时间运行而不退出的,因此./a.out执行一次就有一个进程,执行多次就有多个进程。

2、这样并不是我们想要的。我们的守护进程一般都是服务器,服务器程序只要运行一个就够了,多次同时运行并没有意义甚至会带来错误。

3、因此我们希望我们的程序具有一个单例运行的功能。意思就是说当我们./a.out去运行一个程序时,如果当前还没有这个程序的进程运行则运行之,如果之前已经有一个这个程序的进程在运行则本次运行直接退出(提示程序已经在运行)。

4、实现方法:

(1)、最常用的一种方法就是:用一个文件的存在与否来做标志。具体做法是程序在执行之初去判断一个特定的文件是否存在,若存在则表明进程已经在运行,若不存在则表明进程没有在运行。然后运行这个程序时去创建这个文件。当程序结束的时候去删除这个文件即可。

(2)、这个特定文件要古怪一点,确保不会凑巧真的在电脑中存在的。

1 #include

2 #include

3 #include

4 #include

5 #include

6 #include

7

8 #define FILE "/var/linux_text_single"//定义一个文件

9

10 void delete_file(void);

11

12 int main(void)

13 {

14 //程序运行之初,先判断文件是否存在

15 int fd = -1;

16 fd = open(FILE, O_RDWR | O_TRUNC | O_CREAT | O_EXCL,0664);

17 if(fd < 0)

18 {

19 if(errno == EEXIST)

20 {

21 printf("错误是文件已经存在");

22 return -1;

23 }

24 }

25 printf("打开成功");

26 atexit(delete_file);//注册进程清理函数,这个函数就会在return 0 (程序终止的时候)的时候自动执行

27 int i = 0;

28 for(i = 0; i < 10; i++)

29 {

30 printf("i am running ,%d\n",i);

31 sleep(1);

32 }

33 }

34 void delete_file(void)

35 {

36 remove(FILE);

37 }