根据flock man page,flock有一个-E或--exit-conflict-code标志你可以用来设置flock的退出代码在发生冲突的情况下应该是什么:
-E, --conflict-exit-code 编号
使用-n选项时使用的退出状态,并且存在冲突锁,或者-w选项正在使用中,并且达到超时。默认值为 1。数字必须在 0 到 255 的范围内。
手册页还指出:
退出状态
该命令对所有内容使用 sysexits.h 退出状态值,除非使用选项 -n 或 -w 报告获取锁失败,退出状态由 -E 选项给出,或默认为 1。-E 给出的退出状态必须在 0 到 255 的范围内。
当使用命令变体并执行子命令时,退出状态是子命令的退出状态。
因此,在使用“命令”变体时的 -n 或 -w 标志的情况下,您可以看到两种退出状态。
例子:
$ flock --exclusive /tmp/flock.lock bash -c 'exit 42'; echo $?
42
$ flock --exclusive /tmp/flock.lock flock --exclusive --nonblock --conflict-exit-code 100 /tmp/flock.lock bash -c 'exit 42'; echo $?
100
在第一个示例中,我们看到我们返回了正在使用flock 运行的进程的退出状态。在第二个示例中,我们正在为锁创建争用。在这种情况下,flock 本身会返回我们告诉它的状态码 (100)。如果您没有使用 --conflict-exit-code 标志指定值,它将返回 1。但是,我更喜欢设置不太常见的值,以防止与其他可能返回值 1 的进程/脚本混淆。