Linux - 一个进程锁住了文件,另一个需要使用该文件锁的进程白屏

Posted 王万林 Ben

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 - 一个进程锁住了文件,另一个需要使用该文件锁的进程白屏的主要内容,如果未能解决你的问题,请参考以下文章

Linux 挖矿程序把病毒文件锁住了,删不了,怎么破?(chattr)

Linux 挖矿程序把病毒文件锁住了,删不了,怎么破?(chattr)

linux文件锁flock

获得Gnu/Linux系统与进程信息

极域电子教室是怎样锁住键盘和鼠标的?

请问谁知道能够锁住硬盘的命令