blob: 7a3dbe3789fddb14bf4a931b3aaa501d3f298e3c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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
|