mirror of
https://github.com/osmarks/ngircd.git
synced 2025-02-08 05:10:02 +00:00
Test suite: simplify and enhance getpid.sh
- Try to only search for processes of the current user. - Prefer using pgrep (in addition to pidof) when available. - Streamline system overrides. - Get rid of HEAD_FLAGS: all systems so far support "-1". - Use "ps -o pid,comm" as the default, which is POSIX.1. - Use "sort -r" to hopefully get the newest (=highest) PID, which is the case on older systems not using randomized PIDs at least.
This commit is contained in:
parent
7e78c293a9
commit
22a8744476
@ -1,46 +1,57 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
# ngIRCd Test Suite
|
# ngIRCd Test Suite
|
||||||
|
#
|
||||||
|
# Try to detect the PID of a running process of the current user.
|
||||||
|
#
|
||||||
|
|
||||||
set -u
|
set -u
|
||||||
|
|
||||||
# did we get a name?
|
# did we get a name?
|
||||||
[ $# -ne 1 ] && exit 1
|
if [ $# -ne 1 ]; then
|
||||||
|
echo "Usage: $0 <name>" >&2
|
||||||
[ -x /bin/pidof ] && exec /bin/pidof -s "$1"
|
exit 1
|
||||||
|
|
||||||
# detect flags for "ps" and "head"
|
|
||||||
UNAME=`uname`
|
|
||||||
if [ $UNAME = "FreeBSD" ]; then
|
|
||||||
PS_FLAGS="-a"; PS_PIDCOL="1"; HEAD_FLAGS="-n 1"
|
|
||||||
elif [ $UNAME = "A/UX" ]; then
|
|
||||||
PS_FLAGS="-af"; PS_PIDCOL="2"; HEAD_FLAGS="-1"
|
|
||||||
elif [ $UNAME = "GNU" ]; then
|
|
||||||
PS_FLAGS="-ax"; PS_PIDCOL="2"; HEAD_FLAGS="-n 1"
|
|
||||||
elif [ $UNAME = "Haiku" ]; then
|
|
||||||
PS_FLAGS="-o Id -o Team"; PS_PIDCOL="1"; HEAD_FLAGS="-1"
|
|
||||||
elif [ $UNAME = "Linux" ]; then
|
|
||||||
PS_FLAGS="ax"; PS_PIDCOL="1"; HEAD_FLAGS="-n 1"
|
|
||||||
elif [ $UNAME = "SunOS" ]; then
|
|
||||||
PS_FLAGS="-af"; PS_PIDCOL=2; HEAD_FLAGS="-n 1"
|
|
||||||
else
|
|
||||||
PS_FLAGS="-af"; PS_PIDCOL="2"; HEAD_FLAGS="-n 1"
|
|
||||||
ps $PS_FLAGS >/dev/null 2>&1
|
|
||||||
if [ $? -ne 0 ]; then PS_FLAGS="a"; PS_PIDCOL="1"; fi
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# debug output
|
UNAME=`uname`
|
||||||
#echo "$0: UNAME=$UNAME"
|
|
||||||
#echo "$0: PS_FLAGS=$PS_FLAGS"
|
# Use pgrep(1) whenever possible
|
||||||
#echo "$0: PS_PIDCOL=$PS_PIDCOL"
|
if [ -x /usr/bin/pgrep ]; then
|
||||||
#echo "$0: HEAD_FLAGS=$HEAD_FLAGS"
|
case "$UNAME" in
|
||||||
|
"FreeBSD")
|
||||||
|
PGREP_FLAGS="-a"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
PGREP_FLAGS=""
|
||||||
|
esac
|
||||||
|
exec /usr/bin/pgrep $PGREP_FLAGS -n -u "$LOGNAME" "$1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# pidof(1) could be a good alternative on elder Linux systems
|
||||||
|
if [ -x /bin/pidof ]; then
|
||||||
|
exec /bin/pidof -s "$1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# fall back to ps(1) and parse its output:
|
||||||
|
# detect flags for "ps" and "head"
|
||||||
|
PS_PIDCOL=1
|
||||||
|
case "$UNAME" in
|
||||||
|
"A/UX"|"GNU"|"SunOS")
|
||||||
|
PS_FLAGS="-a"; PS_PIDCOL=2
|
||||||
|
;;
|
||||||
|
"Haiku")
|
||||||
|
PS_FLAGS="-o Id -o Team"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# Linux (GNU coreutils), Free/Net/OpenBSD, ...
|
||||||
|
PS_FLAGS="-o pid,comm"
|
||||||
|
esac
|
||||||
|
|
||||||
# search PID
|
# search PID
|
||||||
ps $PS_FLAGS >procs.tmp
|
ps $PS_FLAGS >procs.tmp
|
||||||
cat procs.tmp | \
|
grep -v "$$" procs.tmp | grep "$1" | \
|
||||||
grep -v "$0" | grep "$1" | \
|
|
||||||
awk "{print \$$PS_PIDCOL}" | \
|
awk "{print \$$PS_PIDCOL}" | \
|
||||||
sort -n >pids.tmp
|
sort -nr >pids.tmp
|
||||||
pid=`head $HEAD_FLAGS pids.tmp`
|
pid=`head -1 pids.tmp`
|
||||||
rm -rf procs.tmp pids.tmp
|
rm -rf procs.tmp pids.tmp
|
||||||
|
|
||||||
# validate PID
|
# validate PID
|
||||||
|
Loading…
x
Reference in New Issue
Block a user