Reliably detect running gpartedbin using pidof (!54)

Debian user reported a bug [1] that when they had PS_FORMAT environment
variable set it prevented GParted running:

    # export PS_FORMAT='ruser,uid,pid,ppid,pri,ni,%cpu,%mem,vsz,rss,stat,tty,start,time,command'
    # gparted
    The process gpartedbin is already running.
    Only one gpartedbin process is permitted.
    # echo $?
    1

Using ps column 'command' includes the command and all it's arguments,
rather than just the command name as ps displays by default.  Thus the
shell wrapper finds the grep command it's using when searching for the
gpartedbin executable.

    # ps -e | grep gpartedbin
    root         0 26114 14777  19   0  0.0  0.0 112712   940 S+   pts/0    10:42:02 00:00:00 grep --color=auto gpartedbin

Fix by searching for running processes using pidof.  pgrep does regular
expression matching where as pidof checks program name is the same [2].
Therefore use of pidof is preferred over pgrep [3].

[1] Debian bug #864932 - gparted fails if PS_FORMAT options are
                         specified
    https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=864932

[2] Difference between pidof and pgrep?
    https://stackoverflow.com/questions/52151698/difference-between-pidof-and-pgrep

[3] [PATCH] gparted.in: Use reliable way of detecting gpartedbin process
    existence
    https://git.alpinelinux.org/aports/tree/community/gparted/gparted.in-Use-reliable-way-of-detecting-gpartedbin-.patch

Closes !54 - Fix gparted not launching when PS_FORMAT environment
             variable set
This commit is contained in:
Mike Fleetwood 2020-02-29 15:53:23 +00:00 committed by Curtis Gedak
parent 21a2da9e24
commit dcceb7b83c

View file

@ -30,7 +30,7 @@
#
# Only permit one instance of GParted to execute at a time
#
if test "z`ps -e | grep gpartedbin`" != "z"; then
if pidof gpartedbin 1> /dev/null; then
echo "The process gpartedbin is already running."
echo "Only one gpartedbin process is permitted."
exit 1
@ -94,7 +94,7 @@ fi
HAVE_SYSTEMCTL=no
for k in '' `echo "$PATH" | sed 's,:, ,g'`; do
if test -x "$k/systemctl"; then
if test "z`ps -e | grep systemd`" != "z"; then
if pidof systemd 1> /dev/null; then
HAVE_SYSTEMCTL=yes
break
fi
@ -107,7 +107,7 @@ done
#
HAVE_UDISKS2_INHIBIT=no
if test -x "/usr/lib/udisks2/udisks2-inhibit"; then
if test "z`ps -e | grep 'udisksd'`" != "z"; then
if pidof udisksd 1> /dev/null; then
HAVE_UDISKS2_INHIBIT=yes
fi
fi
@ -119,7 +119,7 @@ fi
HAVE_UDISKS=no
for k in '' `echo "$PATH" | sed 's,:, ,g'`; do
if test -x "$k/udisks"; then
if test "z`ps -e | grep udisks-daemon`" != "z"; then
if pidof udisks-daemon 1> /dev/null; then
HAVE_UDISKS=yes
break
fi
@ -133,7 +133,7 @@ done
HAVE_HAL_LOCK=no
for k in '' `echo "$PATH" | sed 's,:, ,g'`; do
if test -x "$k/hal-lock"; then
if test "z`ps -e | grep hald`" != "z"; then
if pidof hald 1> /dev/null; then
HAVE_HAL_LOCK=yes
break
fi