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

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

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

4、实现方法:

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

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

 #include <stdio.h>
#include <error.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h> #define FILE "/var/linux_text_single"//定义一个文件 void delete_file(void); int main(void)
{
//程序运行之初,先判断文件是否存在
int fd = -;
fd = open(FILE, O_RDWR | O_TRUNC | O_CREAT | O_EXCL,);
if(fd < )
{
if(errno == EEXIST)
{
printf("错误是文件已经存在");
return -;
}
}
printf("打开成功");
atexit(delete_file);//注册进程清理函数,这个函数就会在return 0 (程序终止的时候)的时候自动执行
int i = ;
for(i = ; i < ; i++)
{
printf("i am running ,%d\n",i);
sleep();
}
}
void delete_file(void)
{
remove(FILE);
}

最新文章

  1. SVN安装及使用
  2. z-index 详解
  3. R语言-数据高级管理
  4. HTML学习总结
  5. JS判断移动设备最佳方法 并实现跳转至手机版网页
  6. C#部分---arraylist集合、arraylist集合中的object数据转换成int类string类等;间隔时间的表示方法;
  7. maven 常见错误解决
  8. block,inline,inline-block
  9. TCP/IP传输层,你懂多少?
  10. mybatis随笔四之MapperProxy
  11. 【WeX5学习】 后端服务之访问数据库表
  12. Netty中解码基于分隔符的协议和基于长度的协议
  13. python 第一课 helloworld
  14. 10、jeecg 默认为空的字段值是如何被填充的?
  15. submit提交判断
  16. int和Integer的自动拆箱/装箱相关问题
  17. 用Python读写Excel文件的方式比较
  18. Java内存区域划分、内存分配原理(转)
  19. 学习mybatis-3 step by step 篇四
  20. Java设计模式GOF之6大设计原则

热门文章

  1. CF97B Superset超级集合
  2. 关于VMware vSphere Client安装时,.net framework4进度条卡住不动(亲测)
  3. MongoDB 初始化数据同步
  4. 我为NET狂官方面试题-数据库篇答案(转)
  5. 三、JavaScript之隐藏HTML元素
  6. 026-PHP常用字符串函数(三)
  7. hive表字段注释显示乱码问题
  8. vue全家桶router、vuex、axios
  9. CentOS7上防火墙操作
  10. ACM-Divide Tree