use*_*755 8 bash locking file-descriptor
在bash下进行锁定的简单且看似可靠的方法是:
exec 9>>lockfile
flock 9
Run Code Online (Sandbox Code Playgroud)
然而,bash臭名昭着地将这样的fd锁传播给所有分叉的东西,包括执行的程序等.
有没有办法告诉bash不要复制fd?锁定附加到fd是很好的,当程序终止时,无论它如何被终止,它都会被删除.
我知道我可以这样做:
run_some_prog 9>&-
Run Code Online (Sandbox Code Playgroud)
但这很乏味.
有没有更好的解决方案?
您可以使用-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.
Run Code Online (Sandbox Code Playgroud)