shell之文件锁 [转贴]

Linux下在shell脚本中设置锁的命令 详细介绍了Linux shell下flock的使用,并提供了例子供参考。 立即下载

http://blog.chinaunix.net/uid-10540984-id-3013517.html


经常在 shell 脚本里要阻止其它进程,比如 msmtp 自带的mail queue 脚本,这个脚本的互斥做法是不正确的,下面介绍下发现的三个通过文件达到互斥的正确做法。

1. util-linux 的 flock

这个命令有两种用法:  flock LOCKFILE COMMAND  ( flock -s 200; COMMAND; ) 200>LOCKFILEflock 需要保持打开锁文件,对于第二种使用方式并不方便,而且 -s 方式指定文件句柄可能冲突。好处是不需要显式的解锁,进程退出后锁必然释放。

2. liblockfile1 的 dotlockfile

号称最灵活可靠的文件锁实现。其等待时间跟  -r 指定的重试次数有关,重试时间为 sum(5, 10, ..., min(5*n, 60), ...).锁文件不需要保持打开, 带来的问题是需要用 trap EXIT 确保进程退出时删除锁文件.

3. procmail 的 lockfile

跟 dotlockfile 类似, 但可以一次性创建多个锁文件.

 

```````````````````````````````````````````````````````

在SHELL中实现文件锁,有两种简单的方式。

一是利用普通文件,在脚本启动时检查特定文件是否存在,如果存在,则等待一段时间后继续检查,直到文件不存时创建该文件,在脚本结束时删除文件。为确保脚本在异常退出时文件仍然能被删除,可以借助于trap "cmd" EXIT TERM INT命令。一般这类文件存放在/var/lock/目录下,操作系统在启动时会对该目录做清理。

另一种方法是是使用flock命令。使用方式如下,这个命令的好处是等待动作在flock命令中完成,无需另外添加代码。

( flock 300 ...cmd... flock -u 300 ) > /tmp/file.lock

但flock有个缺陷是,在打开flock之后fork(),子进程也会拥有锁,如果在flock其间有运行daemon的话,必需确保daemon在启动时已经关闭了所有的文件句柄,不然该文件会因为daemon一直将其置于打开状态而无法解锁。

````````````````````````````````````````````````````````

一个实现linux shell文件锁的例子

最近看到很多讨论如何能不让脚本重复执行的问题,实际就是文件锁的概念,写了一个小例子:
把这个作为文件开头不会产生重复执行的情况。(我想两个执行脚本的文件名一模一样应该不会经常出现吧)

#!/bin/bash
LockFile()
{
  find/dev/shm
/* -maxdepth 0 -type l -follow -exec unlink {} \;
  [ -f /dev/shm/${0##*/
}]&&exit
  ln -s /proc/$$/dev/shm/${0##*/}
  trap "Exit" 0 1 2 3 15 22 24
}
Exit()
{
  unlink /dev/shm/${0##*/};
  exit 0;
}
LockFile
# main program
# program ......
#Exit

 

/var/lock/subsys目录的作用的说明

很多程序需要判断是否当前已经有一个实例在运行,这个目录就是让程序判断是否有实例运行的标志,比如说xinetd,如果存在这个文件,表示已经有xinetd在运行了,否则就是没有,当然程序里面还要有相应的判断措施来真正确定是否有实例在运行。

通常与该目录配套的还有/var/run目录,用来存放对应实例的PID,如果你写脚本的话,会发现这2个目录结合起来可以很方便的判断出许多服务是否在运行,运行的相关信息等等。

   实际上,判断是否上锁就是判断这个文件,所以文件存在与否也就隐含了是否上锁。而这个目录的内容并不能表示一定上锁了,因为很多服务在启动脚本里用touch来创建这个加锁文件,在系统结束时该脚本负责清除锁,这本身就不可靠(比如意外失败导致锁文件仍然存在),我在脚本里一般是结合PID文件(如果有PID文件的话),从PID文件里得到该实例的PID,然后用ps测试是否存在该PID,从而判断是否真正有这个实例在运行,更加稳妥的方法是用进程通讯了,不过这样的话单单靠脚本就做不到了。

 

flock命令在我的系统属于util-linux-2.13-0.46.fc6包,如果没有此命令,尝试更新您系统下的util-linux包。
介绍此命令的原因:
论坛中曾有woodie兄写的脚本串行化的讨论,已经很完善了。
但flock此命令既与shell脚本结合的很好,而且与C/PERL/PHP等语言的flock函数用法很相似,使用起来也很简单。相比之下,woodie兄那篇的内容需要不浅的shell功底来理解。
两种格式分别为:
       flock [-sxon] [-w timeout] lockfile [-c] command...

       flock [-sxun] [-w timeout] fd
介绍一下参数:
-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那句可以换成您需要执行的语句段。
这里请注意一点,我使用<>打开mylockfile,原因是定向文件描述符是先于命令执行的。因此假如在您要执行的语句段中需要读写mylockfile文件,例如想获得上一个脚本实例的pid,并将此次的脚本实例的pid写入mylockfile。此时直接用>打开mylockfile会清空上次存入的内容,而用<打开mylockfile当它不存在时会导致一个错误。当然这些问题都可以用其他方法解决,我只是点出这种最通用的方法。

----------------------------------------------

【背景介绍】 
CU上曾经有几个帖子讨论到一个实际问题,就是如何限制同一时刻只允许一个脚本实例运行。其中本版新老斑竹和其它网友都参加了讨论,但以faintblue兄的帖子对大家启发最大,下面的背景介绍中许多内容都是来自于他。在此感谢faintblue兄,也感谢斑竹和其它朋友! 
woodie总结了一下现有的结果,大体上可以分为两种思路: 
一、简单的方法是,用ps一类命令找出已经运行脚本的数量,如果大于等于2(别忘了把自己也算进去^_^),就退出当前脚本,等于1,则运行。这种方法简单是简单,不过有一些问题: 
首先,ps取得脚本文件进程数量就有很多陷阱,例如有时无法ps到脚本文件的名称; 
即使可以ps到脚本名,如果用到管道的话,由于子shell的原因,在大多数平台下会得到奇怪的结果,有时得到数字a,有时又得到数字b,让人无所适从; 
就算计数的问题已经解决了,还有问题,不过不太严重:如果两个脚本实例同时计数,显然数字都应该等于2,于是两个都退出了。于是在这一时间点上没有一个脚本在执行; 
二、加锁的方法。就是脚本在执行开始先试图得到一个“锁”,得到则继续执行,反之就退出。 
加锁方法也存在一些问题,主要集中在两个方面: 
其一,加锁时如何避免竞态条件(race condition)。即如何找到一些“原子”操作,使得加锁的动作一步完成,中间不能被打断。否则就可能出现下面的情况: 
脚本1检测到没有锁被占用; 
然后脚本2也检测到没有锁被占用; 
脚本1加锁,开始执行; 
然后脚本2(错误地)加锁,也开始执行; 
看到吗,两个脚本在同时执行。:( 
可能的一些加锁的“原子”操作有: 
1.创建目录,当一个进程创建成功后其它进程都会失败; 
2.符号链接:ln -s,一个链接创建后其它进程的ln -s命令会出错; 
3.文件首行的竞争,多个进程以append的方式同时写到文件,只有惟一一个进程写到了文件的第一行,因为不可能有两个第一行。^_^ 
4.其它软件包的加锁工具,通常是c语言二进制程序,自己写的也行。 
目前加锁时的问题已经可以解决。 
其二,找到一种方法避免出现“死锁”的情况,这里是指:虽然“锁”被占用,但却没有脚本在执行。这通常在脚本意外退出,来不及释放占用的“锁”之后。如收到一些系统信号后退出,机器意外掉电后退出等。 
对于前者的情况,可以用trap捕获一些信号,在退出前释放锁;但有些信号是无法捕获的。 
对于后者,可以在机器重起后用脚本自动删除锁来解决。不过有点麻烦。 
所以比较理想的是脚本自己来检测死锁,然后释放它。不过问题的难点在于如何找到一种“原子”操作,将检测死锁和删除死锁的动作一步完成,否则又会出现与加锁时同样的竞态条件的问题。例如: 
进程1检测到死锁; 
进程2监测到死锁; 
进程1删除死锁; 
进程x(也可能是进程1自己)加锁,开始运行; 
进程2(错误地)删除死锁; 
此时锁没有占用,于是任意进程都可以加锁并投入运行。 
这样又出现了两个进程同时运行的情况。:( 
可惜的是:在迄今为止的讨论之后,woodie还没有找到一种合适的“原子”操作。:(只是找到了一种稍微好些的办法:就是在删除时用文件的inode作标识,于是其它进程新建的锁(文件名虽然相同,但inode相同的机率比较微小)不容易被意外删除。这个方法已经接近完美了,可惜还是存在误删的微小几率,不能说是100%安全。唉,山重水复疑无路啊!:( 

最近又有网友问起这个问题,促使我又再次思考。从我以前的一个想法发展了一下,换了一种思路,便有豁然开朗的感觉。不敢藏私,写出来请大家debug。^_^ 

基本的想法就是:借鉴多进程编程中临界区的概念,如果各个进程进入我们设立的临界区,只可能一个一个地顺序进入,不就能保证每次只有一个脚本运行了吗?怎样建立这样一种临界区呢?我想到了一种方法,就是用管道,多个进程写到同一个管道,只可能一行一行地进入,相应的,另一端也是一行一行地读出,如此就可以实现并行执行的多个进程进入临界区时的“串行化”。这与faintblue兄以前贴出的append文件的方法也是异曲同工。 
我们可以让并行的进程同时向一个管道写一行请求,内容是其进程号,在管道另一端顺序读取这些请求,但只有第一个请求会得到一个“令牌”,被允许开始运行;后续的请求将被忽略,对应的进程没有得到令牌,就自己退出。这样就保证了任意时间只有一个进程运行(严格地说是进入临界区)。说到“令牌”,熟悉网络发展史的朋友可能会联想到IBM的Token Ring架构,每一时刻只能有一个主机得到令牌并发送数据,没有以太网的“碰撞”问题。可惜如同微通道技术一样,IBM的技术是不错,但最终还是被淘汰了。不错,这里令牌的概念就是借用于Token Ring。^_^ 
当一个进程执行完毕,向管道发送一个终止信号,即交回“令牌”,另一端接受到后,又开始选取下一个进程发放“令牌”。 
您可能会问了,那么死锁问题又如何解决呢?别急,我在以前的讨论中曾提出将检测处理死锁的代码单独拿出来,交给一个专门的进程来处理的想法,这里就具体实践这样一种思路。当检测和删除死锁的任务由一个专门的进程来执行时,就没有多个并发进程对同一个锁进行操作,所以竞态条件发生的物质基础也就根本不存在了。^_^ 
再发展一下这个思路,允许同时执行多个进程如何?当然可以!只要设立一个计数器,达到限制的数字就停止发放“令牌”即可。 
下面就是woodie上述思路的一个实现,只是在centos 4.2下简单地测试了一下,可能还有不少错误,请大家帮忙“除虫”。^_^思路上有什么问题也请不吝指教: 
脚本1,token.sh,负责令牌管理和死锁检测处理。与下一个脚本一样,为了保持脚本的最大的兼容性,尽量使用Bourne shell的语法,并用printf代替了echo,sed的用法也尽量保持通用性。这里是由一个命名管道接受请求,令牌在一个文件中发出。如果用ksh也许可以用协进程来实现,熟悉ksh的朋友可以试一试。^_^ 

#!/bin/sh 
#name: token.sh 
#function: serialized token distribution, at anytime, only a cerntern number of token given out 
#usage: token.sh [number] & 
#number is set to allow number of scripts to run at same time 
#if no number is given, default value is 1 
if [ -p /tmp/p-aquire ]; then 
  rm -f /tmp/p-aquire 
fi 
if mkfifo /tmp/p-aquire; then 
  printf "pipe file /tmp/p-aquire created\n" >>token.log 
else 
  printf "cannot create pipe file /tmp/p-aquire\n" >>token.log 
  exit 1 
fi 

loop_times_before_check=100 
if [ -n "$1" ];then 
  limit=$1 
else 
  # default concurrence is 1 
  limit=1 
fi 
number_of_running=0 
counter=0 
while :;do 
  #check stale token, which owner is died unexpected 
  if [ "$counter" -eq "$loop_times_before_check" ]; then 
    counter=0 
    for pid in `cat token_file`;do 
      pgrep $pid 
      if [ $? -ne 0 ]; then 
        #remove lock 
            printf "s/ $pid//\nwq\n"|ed -s token_file 
            number_of_running=`expr $number_of_running - 1` 
      fi 
    done 
  fi 
  counter=`expr $counter + 1` 

  # 
  if [ "$number_of_running" -ge "$limit" ];then 
    # token is all given out. bypass all request until a instance to give one back 
    pid=`sed -n '/stop/ {s/\([0-9]\+\) \+stop/\1/p;q}' /tmp/p-aquire` 
    if [ -n "$pid" ]; then 
      # get a token returned 
      printf "s/ $pid//\nwq\n"|ed -s token_file 
      number_of_running=`expr $number_of_running - 1` 
      continue 
    fi 
  else 
    # there is still some token to give out. serve another request 
    read pid action < /tmp/p-aquire 
        if [ "$action" = stop ]; then 
          #  one token is given back. 
          printf "s/ $pid//\nwq\n"|ed -s token_file 
          number_of_running=`expr $number_of_running - 1` 
        else 
          # it's a request, give off a token to instance identified by $pid 
          printf " $pid" >> token_file 
          number_of_running=`expr $number_of_running + 1` 
        fi 
  fi 
done 



-------------------------------------------------------------------------------------------- 
修订记录: 
1.修正token.sh的一个BUG,将原来用sed删除失效令牌的命令用ed命令代替。感谢r2007和waker两位指出错误! 
-------------------------------------------------------------------------------------------- 

脚本2:并发执行的脚本 -- my-script。在"your code goes here"一行后插入你自己的代码,现有的是我用来测试的。 

#!/bin/sh 
# second to wait that the ditributer gives off a token 
a_while=1 
if [ ! -p /tmp/p-aquire ]; then 
  printf "cannot find file /tmp/p-aquire\n" >&2 
  exit 1 
fi 
# try to aquire a token 
printf "$$\n" >> /tmp/p-aquire 
sleep $a_while 
# see if we get one 
grep "$$" token_file 
if [ $? -ne 0 ]; then 
  # bad luck. :( 
  printf "no token free now, exitting...\n" >&2 
  exit 2 
fi 

linux shell之文件锁 经常在 shell 脚本里要阻止其它进程,比如 msmtp 自带的mail queue 脚本,这个脚本的互斥做法是不正确的,下面介绍下发现的三个通过文件达到互斥的正确做法。 1. util-linux 的 flock 这个命令有两种用法:  flock LOCKFILE COMMAND  ( flock -s 200; COMMAND; ) 200>LOCKFILEflock 需要保持打开锁文件,对于第二种使用方式并不方便,而且 -s 方式指定文件句柄可能冲突。好处是不需要显式的解锁,进程退出后锁必然释放。 2. liblockfile1 的 dotlockfile 号称最灵活可靠的文件锁实现 立即下载

相关推荐

shell脚本实现文件锁功能

主要介绍了shell脚本实现文件锁功能,本文实现了一个排它锁,从而实现避免脚本重复执行,需要的朋友可以参考下

shell脚本文件锁——避免脚本重复执行

文章目录1.在shell中实现文件锁的两种方式2.使用flock命令 1.在shell中实现文件锁的两种方式 方法一:利用普通文件 (1)在脚本启动时检查特定文件是否存在,如果存在,则等待一段时间后继续检查,直到文件不存时创建该文件,在脚本结束时删除文件。 (2)为确保脚本在异常退出时文件仍然能被删除,可以借助于trap “cmd” EXIT TERM INT命令。 (3)一般这类文件存放在/var/lock/目录下,操作系统在启动时会对该目录做清理。 方法二:使用flock命令 (1)使用方式如下

喜欢打篮球的普通人 9291

3 种 VLA 模型动作表示方案对比:RT-2 离散化 vs π0 流匹配 vs HybridVLA 混合架构

本文深入对比了三种VLA模型动作表示方案:RT-2离散化、π0流匹配和HybridVLA混合架构。分析了各自的技术原理、优势与局限性,并提供了应用场景选择指南,帮助研究者在具身智能领域做出更优的技术选型决策。

weixin_29031161的博客 319

shell文件锁

在shell中实现文件锁有两种方式,一种是用普通文件来判断,另一种是使用flock命令 1. 普通文件判断 #!/bin/ksh if [ ! -f $LOCK_FILE ]; then #不存在锁文件,则直接产生锁 echo $$>$LOCK_FILE else #存在琐文件,判断锁文件中所指的PID进程是否存在,直到进程退出停止判断,继

Black-REN 8291

为什么传统CNN在视网膜分割中败给Mamba?从血管拓扑学揭秘Serp-Mamba的蛇形扫描黑科技

本文深入分析了传统CNN在视网膜血管分割任务中的局限性,特别是在处理高分辨率图像和复杂血管拓扑结构时。针对这些问题,文章重点介绍了Serp-Mamba模型的核心创新——蛇形交织自适应扫描(SIA)机制,该机制通过让扫描路径自适应地贴合血管曲率,并结合模糊驱动双重校准(ADDR)模块应对极端类别失衡,从而在视网膜血管分割任务上实现了性能的显著突破。

ss78901的博客 891

【现代电路理论】【2】考尔法设计无源单口网络

夏 弥:其实你在冰面上看到鱼浮上来 明年冬天如果你还在那里,那鱼还是会上来换气 那时候你就可以带一把冰镐 把冰面砸开把鱼捞上来熬汤

痛苦的时候装出幸福相,这不是那么难做到的事 2886

shell实战案例- 实现文件锁(调用外部脚本)

目录 锁申请和释放的外部脚本 文件锁实现 结果 需求: 并发写入时实现劝告锁。 1. 锁判断抽离为一个外部脚本,类似于库文件,在业务中调用这个脚本即可 2. 如何调用外部脚本? 3. 捕获退出信号来释放锁 锁申请和释放的外部脚本 #!/bin/bash # 抽离文件锁申请方法 # 2022年1月3日11:24:18 function lockfile(){ trap "echo trapped;rm -rf "${lock_file}";exit 1" EXIT # 无论脚本以何种方

MyySophia的博客 1380

matlab液体湿润模拟,【水文模型】01 三水源新安江模型

目录一、概述1.1 流域概况1.2 产流方式论证1.3 设计基本任务1.4 设计原始资料二、新安江模型2.1 流域划分2.2 产汇流计算2.2.1 蒸散发计算2.2.2 产流计算2.2.3 水源划分2.2.4 汇流计算2.3 模型参数2.3.1 参数物理意义2.3.2 参数率定结果2.4 模拟结果2.4.1 精度统计表2.4.2 计算与实测流量过程线比较三、精度统计与误差分析3.1 精度统计3.2...

weixin_34173656的博客 5327

linux 文件锁 超时,shell脚本实现文件锁功能

1.背景当多个进程可能会对同样的数据执行操作时,这些进程需要保证其它进程没有在操作,以免损坏数据。通常,这样的进程会使用一个“锁文件”,也就是建立一个文件来告诉别的进程自己在运行,如果检测到那个文件存在则认为有操作同样数据的进程在工作。这样的问题是,进程不小心意外死亡了,没有清理掉那个锁文件,那么只能由用户手动来清理了。2.关于flockflock 是对于整个文件的建议性锁。也就是说,如果一个进程...

weixin_34209060的博客 333

手把手教你搞定6脚三位一体数码管的驱动(附C语言源码与Visual Studio调试技巧)

本文详细解析了6脚三位一体数码管的驱动原理与实战技巧,包括引脚复用、动态扫描时序、Visual Studio模拟调试及单片机实现。通过C语言源码示例和调试技巧,帮助开发者快速掌握非标准数码管的驱动方法,提升硬件开发效率。

weixin_30613727的博客 589

【YOLOv11改进- 主干网络】YOLOv11+WTConv(ECCV2024): 基于YOLOv11的主干网络改进,大感受野的小波卷积

论文提出了WTConv,这是一个使用级联小波分解的层,并执行一组小卷积核的卷积,每个卷积专注于输入的不同频率带,并具有越来越大的感受野。这个过程能够在输入中对低频信息给予更多重视,同时仅增加少量可训练参数。实际上,对于一个  的感受野,可训练参数数量只随着  的增长而呈对数增长。而WTConv与常规方法的参数平方增长形成对比,能够获得有效的卷积神经网络(CNN),其有效感受野(ERF)大小前所未有。

qq_41304809的博客 1401

linux shell文件锁,shell脚本实现文件锁功能

1.背景当多个进程可能会对同样的数据执行操作时,这些进程需要保证其它进程没有在操作,以免损坏数据。通常,这样的进程会使用一个“锁文件”,也就是建立一个文件来告诉别的进程自己在运行,如果检测到那个文件存在则认为有操作同样数据的进程在工作。这样的问题是,进程不小心意外死亡了,没有清理掉那个锁文件,那么只能由用户手动来清理了。2.关于flockflock 是对于整个文件的建议性锁。也就是说,如果一个进程...

weixin_28835789的博客 486

RT-Thread GD32F4xx HWTIMER驱动

GD32F4xx RT-Thread 硬件定时器驱动调试使用记录

madao1234的博客 1481

linux shell文件锁,shell中实现文件锁

1.背景当多个进程可能会对同样的数据执行操作时,这些进程需要保证其它进程没有在操作,以免损坏数据。通常,这样的进程会使用一个“锁文件”,也就是建立一个文件来告诉别的进程自己在运行,如果检测到那个文件存在则认为有操作同样数据的进程在工作。这样的问题是,进程不小心意外死亡了,没有清理掉那个锁文件,那么只能由用户手动来清理了。2.关于flockflock 是对于整个文件的建议性锁。也就是说,如果一个进程...

weixin_31749299的博客 581

ADB加密实例

主要介绍如何给adb命令增加加密访问

四儿家的小祖宗的博客 2909

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

shell中实现文件锁

1.背景当多个进程可能会对同样的数据执行操作时,这些进程需要保证其它进程没有在操作,以免损坏数据。通常,这样的进程会使用一个“锁文件”,也就是建立一个文件来告诉别的进程自己在运行,如果检测到那个文件存在则认为有操作同样数据的进程在工作。这样的问题是,进程不小心意外死亡了,没有清理掉那个锁文件,那么只能由用户手动来清理了。2.关于flockflock 是对于整个文件的建议性锁。...

weixin_34220623的博客 292

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

由[原创]后台运行的shell脚本对文件锁的影响想到

今天整理硬盘,无意中看到以前做的一个记录,来自一个博客: [原创]后台运行的shell脚本对文件锁的影响 http://www.codelast.com/?p=1101 之前就是看看,没有仔细思考,现在想想,感觉豁然开朗,放在括号里面,不能再运行,就是因为子进程继承了父进程的信息,记忆力有些差了,应该翻番UEP和UNP了,锁信息也应该 一起继承了,通过lsof命令可以看出来,所以才会...

weixin_30532987的博客 66

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

linux文件锁代码,shell脚本实现文件锁功能

1.背景当多个进程可能会对同样的数据执行操作时,这些进程需要保证其它进程没有在操作,以免损坏数据。通常,这样的进程会使用一个“锁文件”,也就是建立一个文件来告诉别的进程自己在运行,如果检测到那个文件存在则2.关于flockflock 是对于整个文件的建议性锁。也就是说,如果一个进程在一个文件(inode)上放了锁,那么其它进程是可以知道的。(建议性锁不强求进程遵守。)最棒的一点是,它的第一个参数是...

weixin_29099217的博客 339

crontab shell 每5秒执行_crontab并发文件锁的使用

这是学习笔记的第1907篇文章 前几天在做任务时间调度的时候,写了一个Shell脚本,是通过脚本来操作corntab的配置,在修改之前会做备份,文件是crontab_bak_file,然后修改配置,生成文件crontab_bak_file_tmp。看起来是一个操作可控的脚本了。但是在执行批量的任务调度时,发现事情远比想象的复杂。本来是想crontab的修改频率不高,结果有一批实例是...

weixin_32252533的博客 305

Linux shell脚本009(文件锁、规范化运维脚本)

#!/bin/bash SHELL_NAME="shell_template_3.sh" SHELL_DIR="/root/test" SHELL_LOG="${SHELL_DIR}/${SHELL_NAME}.log" LOCK_FILE="/root/test/${SHELL_NAME}.lock" shell_log() { LOG_INFO=$1 ech

cyan_grey的博客 523

shell编程之服务脚本编写,文件锁以及信号捕获

shell脚本编程是linux运维工程师必备的技能,也是非常重要的一个技能,所以把shell编程学好,只有好处。基础语法我也就不讲了,学过C语言这些语言的,稍微看一下就能明白shell编程的基础,所以我们直接切入正题。 开班第20天: 今天的课程大纲: shell编程中的函数 编写一个自动挂载的脚本 利用autofs怎么实现...

weixin_30399871的博客 92
上一篇: fuse的作用
下一篇: shell脚本标配
Iphone4
博客等级 码龄17年 17粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值