getpid.sh 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. #!/bin/sh
  2. # ngIRCd Test Suite
  3. # did we get a name?
  4. [ $# -ne 1 ] && exit 1
  5. [ -x /bin/pidof ] && exec /bin/pidof -s $@
  6. # detect flags for "ps" and "head"
  7. UNAME=`uname`
  8. if [ $UNAME = "FreeBSD" ]; then
  9. PS_FLAGS="-a"; PS_PIDCOL="1"; HEAD_FLAGS="-n 1"
  10. elif [ $UNAME = "A/UX" ]; then
  11. PS_FLAGS="-af"; PS_PIDCOL="2"; HEAD_FLAGS="-1"
  12. elif [ $UNAME = "GNU" ]; then
  13. PS_FLAGS="-ax"; PS_PIDCOL="2"; HEAD_FLAGS="-n 1"
  14. elif [ $UNAME = "Haiku" ]; then
  15. PS_FLAGS="-o Id -o Team"; PS_PIDCOL="1"; HEAD_FLAGS="-1"
  16. elif [ $UNAME = "Linux" ]; then
  17. PS_FLAGS="ax"; PS_PIDCOL="1"; HEAD_FLAGS="-n 1"
  18. elif [ $UNAME = "SunOS" ]; then
  19. PS_FLAGS="-af"; PS_PIDCOL=2; HEAD_FLAGS="-n 1"
  20. else
  21. PS_FLAGS="-af"; PS_PIDCOL="2"; HEAD_FLAGS="-n 1"
  22. ps $PS_FLAGS > /dev/null 2>&1
  23. if [ $? -ne 0 ]; then PS_FLAGS="a"; PS_PIDCOL="1"; fi
  24. fi
  25. # debug output
  26. #echo "$0: UNAME=$UNAME"
  27. #echo "$0: PS_FLAGS=$PS_FLAGS"
  28. #echo "$0: PS_PIDCOL=$PS_PIDCOL"
  29. #echo "$0: HEAD_FLAGS=$HEAD_FLAGS"
  30. # search PID
  31. ps $PS_FLAGS > procs.tmp
  32. cat procs.tmp | \
  33. grep -v "$0" | grep "$1" | \
  34. awk "{print \$$PS_PIDCOL}" | \
  35. sort -n > pids.tmp
  36. pid=`head $HEAD_FLAGS pids.tmp`
  37. rm -rf procs.tmp pids.tmp
  38. # validate PID
  39. [ "$pid" -gt 1 ] > /dev/null 2>&1
  40. [ $? -ne 0 ] && exit 1
  41. echo $pid
  42. exit 0
  43. # -eof-