【发布时间】:2017-10-22 19:16:44
【问题描述】:
我正在使用flock 来确保一次只能运行我的脚本的一个实例。大多数情况下,这似乎工作正常。但是当我注销(我使用 i3wm)或重新启动 PC 时,锁不会被释放;下次登录时,锁文件仍然存在,脚本无法启动,因为它无法获取新锁。
如您所见,我已经尝试trap 释放进程退出时的锁定,但这无济于事。
我是在错误地使用flock,还是我错过了其他东西?我的印象是锁应该在进程结束时被释放,所以应该包括注销/重启。
LOCK_FILE="${HOME}/.my_script.lock"
release_lock() {
# This shouldn't be necessary but it seems
# the lock doesn't release on i3 exit
rm "${LOCK_FILE}"
}
(
if [[ -n $LOGFILE ]]; then
exec >>"$LOGFILE" 2>&1
fi
flock -xn 200 || { show_message "$(basename ${0}): cannot acquire lock ${LOCK_FILE}"; exit 3; }
trap release_lock EXIT
# Call the main function (not included in this snippet)
main 200>&-
) 200>"${LOCK_FILE}"
【问题讨论】:
标签: linux bash shell locking flock