让程序最多只能有一个实例在运行(文件独占)
2023-09-11 14:19:24 时间
通过文件独占的方式,我们打开指定的文件后,用 lockf 对文件加锁,结束程序时解锁文件。
下面代码中我们将当前程序的 PID 写入文件。
int writePidFile(const char *pidFile) {
char str[32];
int fd = open(pidFile, O_WRONLY | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);
if (fd < 0) {
printf("Can't open pidFile %s.\n", pidFile);
exit(1);
}
// Lock pidFile.
if (lockf(fd, F_TLOCK, 0)) {
printf("Can't lock pidFile %s.\n", pidFile);
exit(0);
}
sprintf(str, "%d\n", getpid());
// Write pid to pidFile.
ssize_t len = strlen(str);
if (write(fd, str, len) != len) {
printf("Can't write pidFile %s.\n", pidFile);
exit(0);
}
printf("Wrote pid file %s.\n", pidFile);
return fd;
}
int main(){
int pid_fd = writePidFile("server.pid");
...
lockf(pid_fd, F_ULOCK, 0);
close(pid_fd);
}
相关文章
- Luasocket 服务器,客户端简单实例
- asp.net输出重写压缩页面文件实例
- MySQL运维---多实例
- oracle启动实例时使用参数文件的顺序
- Spring+EhCache缓存实例(详细讲解+源码下载)
- Linux中使用SecureCRT上传、下载文件命令sz与rz用法实例
- MPLS VXN配置实例
- Linux C 单链表 读取文件 并排序 实例并解释
- 不服跑个分:ARM鲲鹏云服务器实战评测——华为云鲲鹏KC1实例 vs. 阿里云G5实例
- MFC实例:SendMessage 发送字符串,结构体,数字
- 【数字信号处理】序列傅里叶变换 ( 傅里叶变换实例 | 矩形窗函数 | 傅里叶变换 | 傅里叶变换幅频特性 | 傅里叶变换相频特性 )
- 第一个Struts2实例之hello world!
- cocos2d-x 3.0游戏实例学习笔记《卡牌塔防》第七步---英雄要升级&属性--解析csv配置文件
- python里怎么样判断文件名和文件实例对象
- POI以SAX方式解析Excel2007大文件(包含空单元格的处理) Java生成CSV文件实例详解
- JUnit套件测试实例
- Hibernate每个子类一张表(使用XML文件)实例
- Spring4 MVC文件下载实例
- Django(5)-路由配置实例
- C#创建Windows窗体应用程序实例12【文件管理】
- 基于JAVA实现的WEB端UI自动化 - WebDriver框架篇 - ant使用 - ant安装、环境变量配置、ant实例及运行Ant Build 出现问题的解决方法
- VXLAN配置实例(二)——VXLAN跨子网互通