700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > linux检测文件是否加锁 Linux 文件锁 - mrsuperli的个人空间 - OSCHINA - 中文开源技术交流社区...

linux检测文件是否加锁 Linux 文件锁 - mrsuperli的个人空间 - OSCHINA - 中文开源技术交流社区...

时间:2020-02-25 19:57:15

相关推荐

linux检测文件是否加锁 Linux 文件锁 - mrsuperli的个人空间 - OSCHINA - 中文开源技术交流社区...

文件锁

Linux 支持的文件锁技术主要包括劝告锁(advisory lock)和强制锁(mandatory lock)这两种。在 Linux 中,不论进程是在使用劝告锁还是强制锁,它都可以同时使用共享锁和排他锁(又称为读锁和写锁)

劝告锁:内核只提供加锁以及检测文件是否已经加锁的手段,但是内核并不参与锁的控制和协调。因此,劝告锁并不能阻止进程对文件的访问,而只能依靠各个进程在访问文件之前检查该文件是否已经被其他进程加锁来实现并发控制。

强制锁:与劝告锁不同,强制锁是一种内核强制采用的文件锁。如果有进程不遵守游戏规则,硬要往加了锁的文件中写入内容,内核就会加以阻拦

channel.lock()对应Linux上fcntl(4, F_SETLKW, {l_type=F_WRLCK, l_whence=SEEK_SET, l_start=0, l_len=0}) = 0 阻塞方式进行文件级别的排它锁。但是是劝告锁还是强制锁?需要文件系统的支持

判断文件是否被加强制锁

1.修改要加强制锁的文件的权限:设置 SGID 位,并清除组可执行位。这种组合通常来说是毫无意义的,系统用来表示该文件被加了强制锁。例如:

# touch /mnt/testfile

# ls -l /mnt/testfile

-rw-r--r-- 1 root root 0 Jun 22 14:43 /mnt/testfile

# chmod g+s /mnt/testfile

# chmod g-x /mnt/testfile

# ls -l /mnt/testfile

-rw-r-Sr-- 1 root root 0 Jun 22 14:43 /mnt/testfile

lslocks

lslocks可以列出所以加锁的文件

COMMAND PID TYPE SIZE MODE M START END PATH

mysqld 1022 POSIX 96K WRITE 0 0 0 /var/lib/mysql/mysql/servers.ibd

java 1799 POSIX 278B WRITE 0 0 0 /media/sf_data/IdeaProjects/DemoTest/person.txt

上面结果可以看出,我使用了java的FileLock对person.txt对整个文件加上了排他的劝告锁。

文件级锁还是记录锁:START 和 END看出

共享还是排他:MODE中看出,这里是WRITE因此是排他。如果是读就是共享

M 应该是强制锁还是劝告锁。0表示不是强制锁。

还有的办法就是,使用vim去编辑,如果写成功说明加的是劝告锁

参考:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。