当前位置: 首页 > news >正文

使用flock单进程启动,仍然有多个同名进程可以同时运行

前几年写过一个linux下程序使用flock单进程启动的介绍

https://blog.csdn.net/qq_42896627/article/details/105965953?fromshare=blogdetail&sharetype=blogdetail&sharerId=105965953&sharerefer=PC&sharesource=qq_42896627&sharefrom=from_link

最近发现一个现象,我们的后台服务程序里面使用了flock,并且设置了LOCK_EX,结果同一个程序还是可以运行多个进程。不过在通过相关命令排查后,我们知晓了原因。原来是第一次启动后再临时目录/tmp下面创建生成的文件被认为或者定时任务删除了,导致脚本再次拉起的时候,同一个程序运行了两个进程。

排查过程如下:

[root@LV7000-97A08D:/tmp]$ !p
ps -ef|grep UniServer
root     13041  9093 19 03:29 ?        00:00:06 ./UniServer
root     15333 10024  3 03:29 pts/2    00:00:00 ./UniServer
root     15657 27997  0 03:29 pts/9    00:00:00 grep --color=auto UniServer
root     30500 31137  0 7月17 pts/1   00:00:00 tail -f ../Log/UniServer_db_change.log_0.log
[root@LV7000-97A08D:/tmp]$ ll /proc/13041/fd
总用量 0
lr-x------ 1 root root 64 718 03:29 0 -> /dev/null
l-wx------ 1 root root 64 718 03:29 1 -> /dev/null
lrwx------ 1 root root 64 718 03:29 10 -> socket:[1020306602]
lrwx------ 1 root root 64 718 03:29 11 -> socket:[1020305640]
lrwx------ 1 root root 64 718 03:29 12 -> socket:[1020304767]
lrwx------ 1 root root 64 718 03:29 13 -> socket:[1020305642]
lrwx------ 1 root root 64 718 03:29 14 -> socket:[1020305644]
lrwx------ 1 root root 64 718 03:29 15 -> socket:[1020300930]
lrwx------ 1 root root 64 718 03:29 16 -> socket:[1020305646]
lrwx------ 1 root root 64 718 03:29 17 -> socket:[1020302084]
lrwx------ 1 root root 64 718 03:29 18 -> socket:[1020303058]
lrwx------ 1 root root 64 718 03:29 19 -> socket:[1020307612]
l-wx------ 1 root root 64 718 03:29 2 -> /dev/null
lrwx------ 1 root root 64 718 03:29 20 -> socket:[1020303113]
lrwx------ 1 root root 64 718 03:29 21 -> socket:[1020303114]
lrwx------ 1 root root 64 718 03:29 22 -> anon_inode:[eventpoll]
lrwx------ 1 root root 64 718 03:29 23 -> socket:[1020303117]
lrwx------ 1 root root 64 718 03:29 24 -> anon_inode:[eventpoll]
lrwx------ 1 root root 64 718 03:29 25 -> socket:[1020307871]
lrwx------ 1 root root 64 718 03:29 26 -> socket:[1020307874]
lrwx------ 1 root root 64 718 03:29 27 -> socket:[1020307892]
lrwx------ 1 root root 64 718 03:29 28 -> socket:[1020307901]
lrwx------ 1 root root 64 718 03:29 29 -> socket:[1020307902]
lr-x------ 1 root root 64 718 03:29 3 -> /dev/urandom
lrwx------ 1 root root 64 718 03:29 30 -> socket:[1020305884]
lrwx------ 1 root root 64 718 03:29 31 -> socket:[1020301174]
lrwx------ 1 root root 64 718 03:29 32 -> socket:[1020301176]
lrwx------ 1 root root 64 718 03:29 33 -> socket:[1020301177]
lrwx------ 1 root root 64 718 03:29 34 -> socket:[1020301178]
lrwx------ 1 root root 64 718 03:29 35 -> socket:[1020309514]
lrwx------ 1 root root 64 718 03:29 36 -> socket:[1020309515]
lrwx------ 1 root root 64 718 03:29 37 -> socket:[1020309516]
lrwx------ 1 root root 64 718 03:29 38 -> socket:[1020309517]
lrwx------ 1 root root 64 718 03:29 39 -> socket:[1020309518]
lrwx------ 1 root root 64 718 03:29 4 -> /tmp/UniServer9FD965488B0B01C62D65B8CC485C419A (deleted)
lrwx------ 1 root root 64 718 03:29 40 -> socket:[1020306030]
lrwx------ 1 root root 64 718 03:29 41 -> socket:[1020306031]
lrwx------ 1 root root 64 718 03:29 42 -> socket:[1020303347]
lrwx------ 1 root root 64 718 03:29 43 -> socket:[1020303348]
lrwx------ 1 root root 64 718 03:29 44 -> socket:[1020303349]
lrwx------ 1 root root 64 718 03:29 45 -> socket:[1020310533]
lrwx------ 1 root root 64 718 03:29 46 -> socket:[1020310537]
lrwx------ 1 root root 64 718 03:29 47 -> socket:[1020308057]
lrwx------ 1 root root 64 718 03:29 48 -> socket:[1020308096]
lrwx------ 1 root root 64 718 03:29 49 -> socket:[1020308160]
lrwx------ 1 root root 64 718 03:29 5 -> socket:[1020302979]
lrwx------ 1 root root 64 718 03:29 50 -> socket:[1020308174]
lrwx------ 1 root root 64 718 03:29 51 -> socket:[1020308175]
lrwx------ 1 root root 64 718 03:29 52 -> socket:[1020310763]
lrwx------ 1 root root 64 718 03:29 6 -> socket:[1020302982]
lrwx------ 1 root root 64 718 03:29 7 -> socket:[1020304761]
lrwx------ 1 root root 64 718 03:29 8 -> socket:[1020304763]
lrwx------ 1 root root 64 718 03:29 9 -> socket:[1020307600]
[root@LV7000-97A08D:/tmp]$ ll /proc/15333/fd
总用量 0
lrwx------ 1 root root 64 718 03:29 0 -> /dev/pts/2
lrwx------ 1 root root 64 718 03:29 1 -> /dev/pts/2
lrwx------ 1 root root 64 718 03:29 2 -> /dev/pts/2
lr-x------ 1 root root 64 718 03:29 3 -> /dev/urandom
lrwx------ 1 root root 64 718 03:29 4 -> /tmp/UniServer9FD965488B0B01C62D65B8CC485C419A
lrwx------ 1 root root 64 718 03:29 5 -> socket:[1020349518]
lrwx------ 1 root root 64 718 03:29 6 -> socket:[1020315763]
lrwx------ 1 root root 64 718 03:29 7 -> socket:[1020346944]
lrwx------ 1 root root 64 718 03:31 8 -> socket:[1020337267]
[root@LV7000-97A08D:/tmp]$ ll /proc/13041/fd/4
lrwx------ 1 root root 64 718 03:29 /proc/13041/fd/4 -> /tmp/UniServer9FD965488B0B01C62D65B8CC485C419A (deleted)
[root@LV7000-97A08D:/tmp]$ ll /proc/15333/fd/4
lrwx------ 1 root root 64 718 03:29 /proc/15333/fd/4 -> /tmp/UniServer9FD965488B0B01C62D65B8CC485C419A
[root@LV7000-97A08D:/tmp]$ stat /proc/13041/fd/4文件:"/proc/13041/fd/4" -> "/tmp/UniServer9FD965488B0B01C62D65B8CC485C419A (deleted)"大小:64              块:0          IO 块:1024   符号链接
设备:3h/3d     Inode:1020308566  硬链接:1
权限:(0700/lrwx------)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2025-07-18 03:29:33.435066579 +0800
最近更改:2025-07-18 03:29:33.434066579 +0800
最近改动:2025-07-18 03:29:33.434066579 +0800
创建时间:-
[root@LV7000-97A08D:/tmp]$ stat /proc/15333/fd/4文件:"/proc/15333/fd/4" -> "/tmp/UniServer9FD965488B0B01C62D65B8CC485C419A"大小:64              块:0          IO 块:1024   符号链接
设备:3h/3d     Inode:1020322980  硬链接:1
权限:(0700/lrwx------)  Uid:(    0/    root)   Gid:(    0/    root)
最近访问:2025-07-18 03:29:57.258067394 +0800
最近更改:2025-07-18 03:29:57.209067393 +0800
最近改动:2025-07-18 03:29:57.209067393 +0800
创建时间:-
[root@LV7000-97A08D:/tmp]$
http://www.lryc.cn/news/591165.html

相关文章:

  • 苹果的机器学习框架将支持英伟达的CUDA平台
  • web后端开发(javaweb第十天)
  • 【后端】Linux系统发布.NetCore项目
  • suricata新增Mysql告警规则处理
  • Zemax坐标断点
  • GitHub开源轻量级语音模型 Vui:重塑边缘智能语音交互的未来
  • 【git 如何查看本地分支与远程分支之间的差异】
  • Oracle11.2.0.4 RAC迁移升级Oracle19.3 RAC
  • 单片机(STM32-时钟系统)
  • AI 智能质检系统在汽车制造企业的应用​
  • select_shape_proto 用起来很省事
  • 错误 0x80370102排查
  • CCLink IE转ModbusTCP网关配置无纸记录器(中篇)
  • 大语言模型系列(1): 3分钟上手,在骁龙AI PC上部署DeepSeek!
  • uniapp云托管前端网页
  • CentOS在线安装docker教程
  • 人工智能概念之八:常见的参数调优方法(交叉验证网格搜索、随机优化、贝叶斯优化、Hyperband优化)
  • npm 和 npx 区别对比
  • Django `transaction.atomic()` 完整使用指南
  • Java行为型模式---命令模式
  • Visual Studio 的常用快捷键
  • 自定义 django 中间件
  • 巧用 Golang 函数特性实现单元测试中的数据库操作 Mock
  • Kafka 控制器(Controller)详解:架构、原理与实战
  • 我的开发日志:随机数小程序
  • Unity VR多人手术模拟恢复2:客户端移动同步问题分析与解决方案
  • Kafka 配置参数详解:ZooKeeper 模式与 KRaft 模式对比
  • mac OS上docker安装zookeeper
  • 第二十三篇文档格式互转大师:Python实现PDF、Word、图片、Markdown的高效转换!你的万能转换器!
  • SpringMVC @ResponseBody注解详解