getpid.sh 960 B

123456789101112131415161718192021222324252627282930313233343536373839
  1. #!/bin/sh
  2. # ngIRCd Test Suite
  3. # $Id: getpid.sh,v 1.4 2003/08/22 11:31:18 alex Exp $
  4. # did we get a name?
  5. [ $# -ne 1 ] && exit 1
  6. # detect flags for "ps" and "head"
  7. if [ `uname` = "FreeBSD" ]; then
  8. PS_FLAGS="-a"; PS_PIDCOL="1"; HEAD_FLAGS="-n 1"
  9. elif [ `uname` = "A/UX" ]; then
  10. PS_FLAGS="-ae"; PS_PIDCOL="1"; HEAD_FLAGS="-1"
  11. elif [ `uname` = "GNU" ]; then
  12. PS_FLAGS="-ax"; PS_PIDCOL="2"; HEAD_FLAGS="-n 1"
  13. else
  14. PS_FLAGS="-f"; PS_PIDCOL="2"; HEAD_FLAGS="-n 1"
  15. ps $PS_FLAGS > /dev/null 2>&1
  16. if [ $? -ne 0 ]; then PS_FLAGS="a"; PS_PIDCOL="1"; fi
  17. fi
  18. # debug output
  19. #echo "$0: PS_FLAGS=$PS_FLAGS"
  20. #echo "$0: PS_PIDCOL=$PS_PIDCOL"
  21. #echo "$0: HEAD_FLAGS=$HEAD_FLAGS"
  22. # search PID
  23. ps $PS_FLAGS > procs.tmp
  24. cat procs.tmp | grep -v "$0" | grep "$1" | awk "{print \$$PS_PIDCOL}" | sort -n > pids.tmp
  25. pid=`head $HEAD_FLAGS pids.tmp`
  26. rm -rf procs.tmp pids.tmp
  27. # validate PID
  28. [ "$pid" -gt 1 ] > /dev/null 2>&1
  29. [ $? -ne 0 ] && exit 1
  30. echo $pid
  31. exit 0
  32. # -eof-