shell文件锁

简介:

锁机制是解决资源独享问题的常见方法,那么在shell中是如何解决的呢?

我们可以尝试使用flock命令(没有此命令,更新一下util-linux包),它与shell可以较好的结合;而且与C/PERL/PHP等语言的flock函数用法很相似,使用起来也很简单。

两种使用格式分别为:
 

flock [-sxon] [-w timeout] lockfile [-c] command...
flock [-sxun] [-w timeout] fd[code]

介绍一下参数:
-s    为共享锁,在定向为某文件的FD上设置共享锁而未释放锁的时间内,其他进程试图在定向为此文件的FD上设置独占锁的请求失败,而其他进程试图在定向为此文件的FD上设置共享锁的请求会成功。
-e    为独占或排他锁,在定向为某文件的FD上设置独占锁而未释放锁的时间内,其他进程试图在定向为此文件的FD上设置共享锁或独占锁都会失败。只要未设置-s参数,此参数默认被设置。
-u    手动解锁,一般情况不必须,当FD关闭时,系统会自动解锁,此参数用于脚本命令一部分需要异步执行,一部分可以同步执行的情况。
-n    为非阻塞模式,当试图设置锁失败,采用非阻塞模式,直接返回1,并继续执行下面语句。
-w    设置阻塞超时,当超过设置的秒数,就跳出阻塞,返回1,并继续执行下面语句。
-o    必须是使用第一种格式时才可用,表示当执行command前关闭设置锁的FD,以使command的子进程不保持锁。
-c    执行其后的comand。
 


举个实用的例子:

 

#!/bin/bash
{
flock -n 3
[ $? -eq 1 ] && { echo fail; exit; }
echo $$
sleep 10
} 3<>mylockfile

此例的功能为当有一个脚本实例正在执行时,另一个试图执行该脚本的进程会失败退出。
sleep那句可以换成您需要执行的语句段。

 














本文转自百度技术51CTO博客,原文链接:http://blog.51cto.com/baidutech/748445,如需转载请自行联系原作者

相关文章
算法备案提示主体名称已被填报,请修改后再进行填报怎么办?
在数字化浪潮中,算法备案是企业合规运营的关键。近期有企业在提交主体备案时遇“主体名称已被填报”的提示,原因是内部信息沟通不畅。解决方案包括找回原账号继续操作或驳回申请重新提交。为预防类似问题,企业应建立备案档案、加强团队沟通并明确责任分工,确保备案流程顺利进行。
|
存储 Perl
如何使用awk处理CSV文件?
【10月更文挑战第16天】如何使用awk处理CSV文件?
461 3
|
前端开发 API
LangChain-25 ReAct 让大模型自己思考和决策下一步 AutoGPT实现途径、AGI重要里程碑
LangChain-25 ReAct 让大模型自己思考和决策下一步 AutoGPT实现途径、AGI重要里程碑
581 0
|
Java PHP
java.lang.UnsupportedOperationException怎么解决?
在Java中,`Arrays.asList()`方法用于将数组转换为列表,但返回的是一个固定大小的列表,它继承自`AbstractList`,不支持`add()`, `remove()`, 或其他可变操作。当尝试对这样的列表执行这些操作时,会抛出`UnsupportedOperationException`。
430 0
|
Java API Android开发
安卓开发app 调用usb 摄像头 需要用到哪个库
在安卓开发中,调用USB摄像头常常使用libuvc库,这是一个跨平台处理USB视频设备的库。有多个基于libuvc的开源项目简化了在安卓上的使用,如UVCCamera和Android EasyCap UVC。例如,UVCCamera提供了一个更简单的接口来访问USB摄像头,并且可以在Jetpack Compose中显示预览。开发者可以参考官方文档、开源项目以及相关教程和资源来学习和实现这一功能。
|
Perl
awk命令中逐行处理
awk命令中逐行处理
355 3
|
缓存 算法 自动驾驶
百度Cyber框架面试总结
百度Cyber框架面试总结
560 0
|
机器学习/深度学习 人工智能 安全
GPT-4硬核揭秘:能力,操纵性,局限性,聊天GPT Plus等
OpenAI创建了 GPT-4,这是 OpenAI 扩大深度学习努力的最新里程碑...
735 0
|
JSON JavaScript 数据格式
使用IIS发布Cesium 3dtiles模型
如何使用windows IIS发布Cesium 3dtiles模型
1057 0