本文主要是介绍Linux - 一个进程锁住了文件,另一个需要使用该文件锁的进程白屏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一个进程锁住了文件,另一个需要使用该文件锁的进程白屏
环境描述
OS:CentOS
问题描述
应用点击查看结果,其界面卡住并变成白屏。
问题分析
使用strace看到
[ben@thesre.cn ~]# strace -tttTffy -o /tmp/strace.log -p <PID>
... snippet omitted ...
fcntl(212, F_SETLK, {type=F_RDLCK, }=EAGAIN(Resource temporarily unavailable))
... snippet omitted ...
使用lsof看到
[ben@thesre.cn ~]# lsof -p <PID> | grep 212
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
virt 9876 thesre 212u REG 0,61 234456 4623 /path/to/locked_file
查看该INODE的在本系统内核中维护的锁
[ben@thesre.cn ~]# awk '/4623/ {print $5}' /proc/locks #查看持有该锁的PID
8765
查看该进程,发现其code path是与正在卡住的进程是相同的程序。程序的实例运行需要获得该文件锁,由于头一个实例已获得该锁,后一个实例就获取不到了。
问题解决
用户侧:一次只运行该程序的一个实例
工具侧:敦促工具开发,需要做好多实例并发的问题。如不支持并发,则应给出友好的提示,而不是卡住,让用户摸不到头脑。
这篇关于Linux - 一个进程锁住了文件,另一个需要使用该文件锁的进程白屏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!