Linux-让程序不能多次运行
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);
}
Linux-让程序不能多次运行的更多相关文章
- linux下程序启动后后台运行实现
关于linux下的程序运行很简单,将源码编译成二进制(假设为proram)文件后直接在命令行运行即可,root#./program如果需要后台运行,即不占用当前终端,这在嵌入式linux显得十分有必要 ...
- Win10 Ubuntu子系统运行32bit Linux原生程序
本文主要描述的是:解决 Win10 Ubuntu子系统中运行 32bit Linux原生程序 报错 Exec format error . 问题来源于 在 Win10 Ubuntu子系统中运行 ...
- [转] Linux下程序的加载、运行和终止流程
TAG: linux, main, _start DATE: 2013-08-08 原文地址: http://blog.csdn.net/tigerscorpio/article/details/62 ...
- Linux进程线程学习笔记:运行新程序
Linux进程线程学习笔记:运行新程序 周银辉 在上一篇中我们说到,当启动一个新进程以后,新进程会复制父进程的大部份上下 ...
- 安卓运行linux应用程序
安卓是可以运行linux应用程序的,安卓系统原来就基于Linux.但是安卓已经把linux改头换面了.具体方法是安装Termux软件,然后就可以运行pkg命令安装软件包了,希望可以帮助到大家.
- 如何在终端使用后台运行模式启动一个Linux应用程序
这是一个篇幅不长但是十分有用的教程,可以帮助你在终端启动一个Linux应用程序,并且使终端窗口不会丢失焦点. 我们有很多可以在Linux系统中打开一个终端窗口的方法,这取决于你的选择以及你的桌面环境. ...
- 嵌入式linux应用程序移植方法总结
嵌入式linux应用程序移植方法总结 前段时间一直在做openCapwap的移植和调试工作,现在工作已接近尾声,编写本文档对前段工作进行一个总结,分享下openCapwap移植过程中的经验和感悟.江浩 ...
- 第六章第一个linux个程序:统计单词个数
第六章第一个linux个程序:统计单词个数 从本章就开始激动人心的时刻——实战,去慢慢揭开linux神秘的面纱.本章的实例是统计一片文章或者一段文字中的单词个数. 第 1 步:建立 Linu x 驱 ...
- .NET程序的编译和运行
程序的编译和运行,总得来说大体是:首先写好的程序是源代码,然后编译器编译为本地机器语言,最后在本地操作系统运行. 下图为传统代码编译运行过程: .NET的编译和运行过程与之类似,首先编写好的源代码,然 ...
- Linux应用程序的地址布局
转载自:http://blog.csdn.net/embedded_hunter http://www.360doc.com/content/12/0405/00/1671317_200882538. ...
随机推荐
- IP地址 网络地址 子网掩码
提纲 (1)IP地址 (2)网络地址 (3)子网掩码 IP地址=网络地址+主机地址,图1中的IP地址是192.168.100.1,这个地址中包含了很多含义.如下所示:网络地址(相当于街道地址) ...
- 安装scrapy框架报错是常见问题
还好,本人只碰到其中一个bug,以下是此次安装经验 环境 py3.4 windows7 64位 安装有VS2010 pip包管理(pycharm) 报错信息 安装lxml过程中报错:error: co ...
- nodejs 杂七杂八
nodejs => 提供核心模块语法 node中的回调函数 都是异步
- 快速进阶Vue3.0
在2019.10.5日发布了Vue3.0预览版源码,但是预计最早需要等到 2020 年第一季度才有可能发布 3.0 正式版. 可以直接看 github源码. 新版Vue 3.0计划并已实现的主要架构改 ...
- 二十三、SAP中内表的修改
一.通过MODIFY关键字来修改内表的内容,it相当于全部内容,wa相当于一条内容 二.效果如下
- 二十二、SAP中创建一个内表,并添加内容循环输出显示
一.直接上代码 二.输出如下
- HDOJ 1722--Cake(切蛋糕问题)
一次生日Party可能有p人或者q人参加,现准备有一个大蛋糕.问最少要将蛋糕切成多少块(每块大小不一定相等),才能使p人或者q人出席的任何一种情况,都能平均将蛋糕分食. Input 每行有两个数p和q ...
- Python PIP包管理器
版权所有,未经许可,禁止转载 章节 Python 介绍 Python 开发环境搭建 Python 语法 Python 变量 Python 数值类型 Python 类型转换 Python 字符串(Str ...
- 框架基础学习之--详解web+maven+spring+mybatis+struts框架文件夹作用
详解web+maven+spring+mybatis+struts框架文件夹作用 1.程序名 2.Mybatis,mybatis是数据持久层,就是和对象类有关系的东西 3.存放java文件,xml,p ...
- Day 21:网络编程(2)
以课程中feiQ为例,feiQ作为一个典型的网络编程应用,用一段代码尝试给自己的发送消息 import java.io.IOException; import java.net.DatagramPac ...