summaryrefslogtreecommitdiff
path: root/deprecated-ngircd/src/testsuite/getpid.sh
diff options
context:
space:
mode:
Diffstat (limited to 'deprecated-ngircd/src/testsuite/getpid.sh')
-rwxr-xr-xdeprecated-ngircd/src/testsuite/getpid.sh67
1 files changed, 67 insertions, 0 deletions
diff --git a/deprecated-ngircd/src/testsuite/getpid.sh b/deprecated-ngircd/src/testsuite/getpid.sh
new file mode 100755
index 0000000..7a3dbe3
--- /dev/null
+++ b/deprecated-ngircd/src/testsuite/getpid.sh
@@ -0,0 +1,67 @@
+#!/bin/sh
+# ngIRCd Test Suite
+#
+# Try to detect the PID of a running process of the current user.
+#
+
+set -u
+
+# did we get a name?
+if [ $# -ne 1 ]; then
+ echo "Usage: $0 <name>" >&2
+ exit 1
+fi
+
+UNAME=`uname`
+
+# Use pgrep(1) whenever possible
+if [ -x /usr/bin/pgrep ]; then
+ case "$UNAME" in
+ "FreeBSD")
+ PGREP_FLAGS="-a"
+ ;;
+ *)
+ PGREP_FLAGS=""
+ esac
+ if [ -n "${LOGNAME:-}" ] || [ -n "${USER:-}" ]; then
+ # Try to narrow the search down to the current user ...
+ exec /usr/bin/pgrep $PGREP_FLAGS -n -u "${LOGNAME:-$USER}" "$1"
+ else
+ # ... but neither LOGNAME nor USER were set!
+ exec /usr/bin/pgrep $PGREP_FLAGS -n "$1"
+ fi
+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
+ps $PS_FLAGS >procs.tmp
+grep -v "$$" procs.tmp | grep "$1" | \
+ awk "{print \$$PS_PIDCOL}" | \
+ sort -nr >pids.tmp
+pid=`head -1 pids.tmp`
+rm -rf procs.tmp pids.tmp
+
+# validate PID
+[ "$pid" -gt 1 ] >/dev/null 2>&1 || exit 1
+
+echo $pid
+exit 0