From b11e8d8b4555479dce4054aca1feffb06c0066e6 Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Tue, 15 Nov 2016 01:04:39 -0500 Subject: sys-process/cronbase: fix non-POSIX shell code #595492 --- sys-process/cronbase/files/run-crons-0.3.7 | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'sys-process/cronbase/files/run-crons-0.3.7') diff --git a/sys-process/cronbase/files/run-crons-0.3.7 b/sys-process/cronbase/files/run-crons-0.3.7 index 902794e19e6f..42c88100df1c 100755 --- a/sys-process/cronbase/files/run-crons-0.3.7 +++ b/sys-process/cronbase/files/run-crons-0.3.7 @@ -56,7 +56,18 @@ grab_lock() { # This is better than kill -0 because we can verify that it's really # another run-crons process. - if diff -qs /proc/{${cronpid},$$}/cmdline > /dev/null 2>&1; then + # We have to send stderr to /dev/null for two reasons: + # - If the process disappears, the cmdline file might not exist. + # - The cmdline file contains NUL bytes, but bash-4.4+ warns when + # you try to assign NUL bytes to variables. + # It'd be nice to not do it for a lot of code, but there's not easy + # alternative in shell code. We could `cat | tr`, but that'd waste + # a bit more than just a simple cat. + if ( + cmdline1=$(cat "/proc/${cronpid}/cmdline") || : + cmdline2=$(cat "/proc/$$/cmdline") + [ "${cmdline1}" = "${cmdline2}" ] + ) 2>/dev/null ; then # Whoa, another run-crons is really running. return 1 fi -- cgit v1.2.3-65-gdbad