--- /dev/null
+Sometimes a shell script needs to prevent itself from being called multiple
+times concurrently.
+
+This is a locking problem:
+http://wiki.bash-hackers.org/howto/mutex
+https://gist.github.com/przemoc/571091
+
+However, in case where the script in question prepares the work for some other
+operation (e.g. the script is a "pre hook") it is typically called from
+another program, interleaved with other processes, and so locking and
+unlocking cannot be in the same script.
+
+By using a symmetrical "post hook", assuming that it is called by the same
+process which called the "pre hook", the parent PID can be used as a condition
+value, thus locking and unlocking can be performed in two distinct scripts.
--- /dev/null
+#!/bin/sh
+#
+# Acquire a lock to protect a "pre" hook against concurrent executions.
+#
+# Copyright (C) 2018 Antonio Ospite <ao2@ao2.it>
+# SPDX-License-Identifier: WTFPL
+#
+# This program is free software. It comes without any warranty, to
+# the extent permitted by applicable law. You can redistribute it
+# and/or modify it under the terms of the Do What The Fuck You Want
+# To Public License, Version 2, as published by Sam Hocevar. See
+# http://sam.zoy.org/wtfpl/COPYING for more details.
+
+set -e
+
+LOCKDIR=/run/lock/mylockdir
+mkdir "$LOCKDIR" 2>/dev/null || { echo "The enter script had been launched. But the exit script has not." 1>&2; exit 1; }
+echo $PPID > "$LOCKDIR/pid"
+
+# Do stuff here
--- /dev/null
+#!/bin/sh
+#
+# Example of how to safely release the lock in the "post" hook.
+#
+# Copyright (C) 2018 Antonio Ospite <ao2@ao2.it>
+# SPDX-License-Identifier: WTFPL
+#
+# This program is free software. It comes without any warranty, to
+# the extent permitted by applicable law. You can redistribute it
+# and/or modify it under the terms of the Do What The Fuck You Want
+# To Public License, Version 2, as published by Sam Hocevar. See
+# http://sam.zoy.org/wtfpl/COPYING for more details.
+
+set -e
+
+LOCKDIR=/run/lock/mylockdir
+LOCKPID=$(cat "$LOCKDIR/pid")
+[ "$LOCKPID" = $PPID ] || { echo "The enter script was launched from another process. Unlocking aborted." >&2; exit 1; }
+
+# Do stuff here
+
+rm -rf "$LOCKDIR"