linux用文件锁实现保证一个程序只能启动一个进程

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

转载自:   http://www.cppblog.com/Tim/archive/2011/10/27/159201.html

#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>

int main(int argc,char* argv[])
{
 int fd;
 int lock_result;
 struct flock lock;
 char * pFileName = "tmp.lck";
 fd = open(pFileName,O_RDWR);
 if(fd<0)
 {
  printf("Open file failed.\n");
  return 1;
 }
 lock_result = lockf(fd,F_TEST,0);  //参数使用F_LOCK,则如果已经加锁,则阻塞到前一个进程释放锁为止,参数0表示对整个文件加锁
 //返回0表示未加锁或者被当前进程加锁;返回-1表示被其他进程加锁
 if(lock_result<0)
 {
  perror("Exec lockf function failed.\n");
  return 1;
 }
 
  lock_result = lockf(fd,F_LOCK,0);  //参数使用F_LOCK,则如果已经加锁,则阻塞到前一个进程释放锁为止,参数0表示对整个文件加锁
 if(lock_result<0)
 {
  perror("Exec lockf function failed.\n");
  return 1;
 }

 printf("Pid: %ld process locked the file.\n",(long)getpid());
 
 //do something
 while(getchar()<0);
 
 printf("Pid: %ld process release the file.\n",(long)getpid());
 return 0;
}


Linux系列:让一个脚本同时只能运行一个(flock锁处理) 目录 使用方法 准备脚本 运行 使用方法 flock -xn "锁文件路径" -c "需要加锁的脚本完整路径" 准备脚本 运行 阅读详情

相关推荐

Linux下避免程序被重复运行

Linux下避免程序被重复运行 目标 在Linux下,有些程序同时运行多个实例时会出错。因此,需要使用一些方法避免程序被重复运行,即同一时间段内只能一个程序实例运行。 思路 程序启动的时候打开某个锁文件并对该文件加锁,退出程序时解锁。 如果无法正常加锁,则说明程序已经在内存中运行了,当前线程return即可。 代码实现 首先,先以创建+可读写模式打开锁文件temp.lock(可自行定义文件名) 之后使用flock文件文件加锁,如果加锁失败,检查errno是否为EWOULDBLOCK。如果是则说明已经有进

我不姓周,不唱朋友 3516

禁止程序重复启动的一些方法

禁止程序重复启动的一些方法

大草的博客 1957

Linux进程文件访问权限

介绍linux进程文件访问权限

架构师专栏 7458

防止进程重新启动-keepalived源码解析

在上面一篇文章中,写了一种防止进程重新启动的方式:文件和记录锁(fcntl()和F_SETLK(设置记录锁))提供一种方法确保只有程序只被正在运行一次。

xuzhouweihao的专栏 1517

(转)linux文件锁实现保证一个程序只能启动一个进程

#include<stdio.h> #include<unistd.h>#include<fcntl.h>#include<errno.h>intmain(intargc,char*argv[]){intfd;intlock_result;structflocklock;char*pFileName=...

dianchixian5277的博客 337

linux 保证一个进程,(转)linux文件锁实现保证一个程序只能启动一个进程

Ubuntu 14&period;04安装Cinnamon桌面环境2014年05月26日 薄荷开源网,mintos,网如其名,自然最关注的还是 Linux Mint 这个 DistroWatch 排名第一的 Linux 发行版.奈何此前的Linux Mint 17 ...java框架篇---spring IOC依赖注入spring依赖注入的方式有4种 构造方法注入 属性注入 工厂注入 注...

weixin_29626189的博客 459

文件锁

http://www.2cto.com/os/201109/103758.html  多用户多任务操作系统中非常重要的一个内容就是文件锁。用户在更新文件时,期望可以使用某种机制,防止两种进程同时更新文件同一区域而造成丢失,或者防止文件内容在未更新完毕时被读取等并发引起的问题,这种机制就是文件锁。      进程在操作文件期间,可以使用文件锁,锁定文件中的敏感部分,防止其他进程越权操作该部分数据

chivalry 1867

使用文件锁 保证某个程序启动一次

使用文件锁保证定时任务只启动一次 def singleton_scheduler(): """文件锁实现单例定时启动""" import fcntl import os import platform def start_scheduler(): if platform.system() != "Windows": scheduler.start() pid_file = open(os.path.realpat

weixin_42368421的博客 738

linux文件锁保证只能同时启动一个实例,不同时启动多个实例)

在上述示例代码中,当程序正常退出时,会显式地解锁并关闭文件描述符,这是为了确保文件锁被正确释放。但是,如果程序异常退出(例如由于信号中断或崩溃),操作系统会自动关闭文件描述符,并释放文件锁。命令可以对文件进行加锁,如果加锁成功,则表示程序是第一个实例,可以继续执行。如果加锁失败,则表示已经有一个实例在运行,程序会输出提示信息并退出。如果加锁失败,则表示已经有一个实例在运行,程序会输出提示信息并退出。这是因为文件锁是与文件描述符关联的,当文件描述符关闭时,文件锁也会被释放。一种常见的方法是使用。

Dontla的博客 1779

启动一个进程,以及java的文件锁问题

保证启动一个应用,通常可以使用两种方法 获取 一个 文件锁,并且在应用 运行期间都不进行 释放 绑定一个端口,并且在运行期间都不进行释放 绑定端口要浪费一个端口,因此不推荐. 下面是java获取一个文件锁的操作. @SneakyThrows public static boolean lock(String file) { Path path = Paths.get(file); ...

l1161558158的博客 537

利用文件锁来防止进程启动多次

具体方法是在程序启动时,尝试获取一个特定文件文件锁,如果获取成功,则说明当前没有其他进程在运行该程序;如果获取失败,则说明已经有其他进程在运行该程序,可以选择终止当前进程。需要注意的是,上述示例中的文件锁只适用于同一个系统上的多个进程之间,并且需要高度保证文件的正确性,以避免死锁或者多个进程之间的冲突。如果获取锁失败,则说明已经有其他进程在运行该程序,可以直接返回或进行相应处理;函数返回值为-1),则说明已经有其他进程在运行该程序,函数返回。在程序执行完毕后,需要释放文件锁,可以通过删除锁文件实现

南_无_生的博客 729

如何保证只有一个进程实例

如何保证只有一个进程实例 2013-03-11 14:52:50 分类: LINUX 作者:gfree.wind@gmail.com 博客:blog.focus-linux.net   linuxfocus.blog.chinaunix.net  微博:weibo.com/glinuxer QQ技术群:4367710   本文的

robertzhouxh的专栏 1267

win32 linux启动一个进程

windows OnInitDialog HANDLE m_hMutex = ::CreateMutex(NULL, TRUE, _T("SZSEL2Collecter")); if (GetLastError() == ERROR_ALREADY_EXISTS) { if (MessageBox(_T("SZSEL2Collecter采集程序已正在运行...

yubing841026的专栏 672

几行代码实现c++/qt程序进程单例(文件锁)

qt程序进程单例(文件锁的方法) 原理 通过锁定文件,直至程序退出解锁,那么当程序第二次打开的时候检测到文件是锁定的,则退出 使用qt文件锁的方法 请在main函数里面使用,不要单独封装函数,保证锁没有退出,因为函数退出,锁也会跟着退出 #include <QLockFile> #include <QApplication> //文件名称(随便写) #define INSTANCE_LOCK "singleApplication" int main(int argc, char *

depend的博客 4262

Linux文件锁解决多进程并发

通过启动时尝试对锁文件加排他锁,若失败则退出,锁文件内容为进程PID,便于问题排查,与设计模式中的单例模式类似。命令来查看系统中当前的文件锁,值得注意的是锁的粒度(全局锁 vs 区域锁)和死锁风险。当多个进程同时向同一日志文件写入数据时,内核的I/O缓冲区可能导致日志行交错。建议性锁(Advisory Lock):依赖进程主动遵守锁规则(常用)。会阻塞进程直到锁被释放,其实看起来与线程同步中的读写锁类似。• 进程B覆盖了进程A的部分内容,导致文件内容不完整。强制锁相对效率不高,通常用建议锁。

qq_40170041的博客 455

linux c++ 程序只能运行一个实例 文件锁

【代码】linux c++ 程序只能运行一个实例 文件锁

sun007700的专栏 458

linux python 读写文件互斥,python的文件锁使用,多进程互斥

python的文件锁目前使用的是fcntl这个库,它实际上为Unix上的ioctl,flock和fcntl函数提供了一个接口。1.fcntl库的简单使用import fcntl import os, timeFILE = "counter.txt"if not os.path.exists(FILE): # create the counter file if it doesn't existf...

weixin_36460573的博客 848

Golang实现高可靠进程保活:基于Linux文件锁的双进程互保与托孤机制

Linux系统编程中,进程间通信(IPC)和进程管理是构建稳定后台服务的基础。文件锁(flock)作为一种内核提供的建议性锁机制,通过排他锁的阻塞与自动释放特性,能够实现进程状态的可靠感知。这一原理在构建高可用服务时具有重要技术价值,尤其适用于需要持续运行的守护进程、后台代理等场景。通过双进程互保模型,结合多进程监控与双fork托孤机制,可以显著提升进程的生存能力和隐蔽性。本文以Golang为例,详细解析如何利用其并发模型和系统调用包,实现一套借鉴自经典案例的进程保活方案,涵盖从核心原理到工程实践的全过程

weixin_30905981的博客 383
上一篇: shell脚本中判断进程是否存在
下一篇: ubuntu下自动安装arm-linux-gcc和arm-linux-g++
yingxian_Fei
博客等级 码龄16年 153粉丝 196原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值