- #!/bin/sh
- # Alexis Megas, 2005.
- # Alexis Megas, 02/24/2007. Removed clear call.
- # Alexis Megas, 07/04/2007. Direct errors to /dev/null.
- # A script that allows the superuser to CONTINUE or STOP another
- # user's processes. The script runs in both interactive and
- # non-interactive modes.
- # stop_user_processes.sh [-f] -c -u userid (CONTINUE)
- # stop_user_processes.sh [-f] -s -u userid (STOP)
- force=0
- usage="usage: stop_user_processes.sh -c|-s -u USERID [-f(orce)]"
- while getopts cfsu: options 2> /dev/null
- do
- case $options in
- c) sig="-CONT"
- ;;
- f) force=1
- ;;
- s) sig="-STOP"
- ;;
- u) userid=$OPTARG
- ;;
- \\?) echo "$usage"
- exit 1
- ;;
- esac
- done
- if [ -z "$userid" -o $OPTIND -ge 6 ]
- then
- echo "$usage"
- exit 1
- fi
- answer=""
- for pid in `ps -U $userid -o pid 2> /dev/null | tail +2 2> /dev/null`
- do
- name="`ps -U $userid -o pid,comm 2> /dev/null | grep \\" $pid \\" 2> /dev/null | awk '{print $2}' 2> /dev/null`"
- if [ -z "$name" ]
- then
- continue
- fi
- if [ $force -eq 0 -a "$answer" != "a" ]
- then
- if [ "$sig" = "-STOP" ]
- then
- echo "Stop $pid ($name)? [a/n/q/y]: \\c"
- else
- echo "Continue $pid ($name)? [a/n/q/y]: \\c"
- fi
- read answer
- while [ "$answer" != "a" -a "$answer" != "n" -a "$answer" != "q" \\
- -a "$answer" != "y" ]
- do
- if [ "$sig" = "-STOP" ]
- then
- echo "Stop $pid ($name)? [a/n/q/y]: \\c"
- else
- echo "Continue $pid ($name)? [a/n/q/y]: \\c"
- fi
- read answer
- done
- if [ "$answer" = "n" ]
- then
- continue
- elif [ "$answer" = "q" ]
- then
- exit 0
- fi
- fi
- kill $sig $pid 2> /dev/null
- if [ $? -eq 0 ]
- then
- if [ "$sig" = "-STOP" ]
- then
- echo "$pid ($name) stopped."
- else
- echo "$pid ($name) continued."
- fi
- else
- if [ "$sig" = "-STOP" ]
- then
- echo "Error stopping $pid ($name)."
- else
- echo "Error continuing $pid ($name)."
- fi
- fi
- done
- exit 0
- #该片段来自于http://www.codesnippet.cn/detail/220120131823.html
来源: http://www.codesnippet.cn/detail/220120131823.html