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. ...
随机推荐
- 洛谷P1002——过河卒
又是洛谷题,要不是有小姐姐不会,我才不想动脑子.先贴一下题目地址https://www.luogu.org/problem/P1002 再贴一下题目: 我们读一下题目,这可不比学校的**算法题,读完一 ...
- UVALive - 7752 Free Figurines
题意:有n个娃娃,如果大娃娃j直接套小娃娃i,则fa[i] = j.若fa[i] = 0,则该娃娃自由.给出每个娃娃初始的父亲,和改变后的父亲,在满足以下合法操作的条件下,问最少需要多少次变换. 1. ...
- Day4-T2
原题目 某大厦共有 N 层,现在知道共有 K 个请求要上下电梯:下面告诉你每个请求乘电梯的出发层次和结 束层次.请你求出整个电梯的运行过程.假设电梯一开始停在第一层,运行 K 个请求最后回到第一层. ...
- Sublime Text3 python自动补全问题——Sublime Text3安装Anaconda插件
学习python的时候 在编辑器的选择上会有很多选择,我最终还是选择了sublime text3. 相对于其他编辑器,sublime text有以下特性: 插件多,类似GoSublime,Emmet信 ...
- 11.json
import json # json反序列化 # json_str = '{"name":"qiyue","age":18}' # stud ...
- 通过GlobalAddAtom,GlobalGetAtomName方式发送字符串
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms ...
- Python 加载mnist、cifar数据
import tensorflow.examples.tutorials.mnist.input_data mnist = input_data.read_data_sets("MNIST_ ...
- 吴裕雄 Bootstrap 前端框架开发——Bootstrap 字体图标(Glyphicons):glyphicon glyphicon-print
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...
- 第三篇数据库与ORM
第三篇 数据库与ORM 1 新建数据库 2 数据库的配置 3 ORM表模型 4 ORM之增 5 ORM之删 6 ORM之改 7 ORM之查 1 新建数据库 在终端cmd中 mysql –uroot – ...
- [ACTF2020 新生赛]Upload
0x00 知识点 emm常规上传题目 之前写的文件上传文章: https://www.cnblogs.com/wangtanzhi/p/12243206.html 0x01 解题 简单测试一下就get ...