防止锁传播

2024-01-01

在 bash 下进行锁定的一种简单且看似可靠的方法是:

exec 9>>lockfile
flock 9

然而,众所周知,bash 会将这样的 fd 锁传播到所有分叉的东西,包括执行的程序等。

有什么办法告诉 bash 不要重复 fd 吗?很好的是,锁附加到一个 fd 上,当程序终止时,无论程序如何终止,该锁都会被删除。

我知道我可以做这样的事情:

run_some_prog 9>&-

但这是相当乏味的。

还有更好的解决办法吗?


您可以使用-o命令行选项flock(1)(长选项--close,这可能更适合在脚本中编写以实现自记录性质),以指定在执行命令之前应关闭文件描述符flock(1):

   -o, --close
          Close the file descriptor on which the lock is held
          before executing command.  This is useful if command
          spawns a child process which should not be holding
          the lock.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

防止锁传播 的相关文章