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,如需转载请自行联系原作者

相关文章
|
3月前
|
监控 Shell Linux
在shell中查看进程
在shell中查看进程
220 46
|
3月前
|
Shell Docker 容器
在shell中启动进程
在shell中启动进程
61 2
|
5月前
|
Shell
我们一起来学Shell - shell的并发及并发控制
我们一起来学Shell - shell的并发及并发控制
70 0
|
3月前
|
Shell Linux 开发工具
linux shell脚本利用 kill -0 检查进程是否存在
linux shell脚本利用 kill -0 检查进程是否存在
59 1
|
29天前
|
存储 Shell 数据安全/隐私保护
【Shell 编程指南】Shell read命令 (从标准输入读取数值)
【Shell 编程指南】Shell read命令 (从标准输入读取数值)
23 0
|
3月前
|
监控 Shell Python
在Shell中,进程控制
在Shell中,进程控制
21 3
|
3月前
|
Shell Linux Perl
在Shell中列出当前正在运行的进程
在Shell中列出当前正在运行的进程
39 3
|
4月前
|
监控 Shell API
Shell进程管理
Shell进程管理
19 2
|
5月前
|
监控 Shell Linux
linux后台执行shell脚本
linux后台执行shell脚本
|
10月前
|
Shell Linux
linux使用Shell同时运行多个命令
linux使用Shell同时运行多个命令

热门文章

最新文章