SUMMARY: help for a script
Gerard Henry
Gerard.Henry at cmi.univ-mrs.fr
Wed Apr 23 05:36:30 EDT 2003
many thanks to all for your responses.
sbhatia at siue.edu
s.evans at TriCorInd.com
alex at posixnap.net
mh1272 at yahoo.com
vogelke at pobox.com
t at trey.net
stephan.grund at isst.fhg.de
dledger at ivdcs.demon.co.uk
SDaubigne at bordeaux-bersol.sema.slb.com
and specially for Sebastien DAUBIGNE, because i will use his command in
my crontab:
ps -eo pcpu,pid,args | awk '/netscape/ && $1 > 5 {print $2}' | xargs -n
10 kill -9
my first mail was not so clear, i want to automatically kill process
such netscape because they are bugged, i don't want to do it by hand.
Here is some contributions:
******************************************************************************
form Evans, Shawn:
#!/bin/sh
#
PROC=netscape
NUM=50
CPU=`prstat 1 1 | grep $PROC | awk '{print $9}' |awk -F. '{print $1}'`
#
if [ $CPU -ge $NUM ] ; then
kill -9 `ps -ef | grep -i $PROC`
fi
from Alex J. Avriette:
is there something wrong with ps -ef | grep netscape | awk '{ print $2 }'
******************************************************************************
from Karl Vogel:
You might want to do it by hand using the script below; it looks for
the processes on the command line and puts you in VI to pick the
ones
you want to kill.
---------------------------------------------------------------------------
#!/bin/ksh
#
# $Id: skill-solaris.sh,v 1.3 2001/04/29 22:15:13 vogelke Exp $
# $Source: /src/opt/scripts/RCS/skill-solaris.sh,v $
#
# NAME:
# skill
#
# SYNOPSIS:
# skill [-signal] [-dhinv] {tty user command pid regexp}
#
# DESCRIPTION:
# "skill" is a program to blow away processes. You can specify
# processes by tty, userid, command name, process id, or an
# egrep-style regular expression.
#
# OPTIONS:
# -d, --debug show debug output
# -h, --help print this message
# -i, --interact edit the process list before killing
# -n, --nokill show processes but don't kill them
# -v, --version print the version and exit
#
# AUTHOR:
# Karl Vogel <vogelke at dnaco.net>
# Sumaria Systems, Inc.
# Based on a script by Tom Christiansen -- tchrist at convex.com
#
# A similar script by Ric Anderson <ric at rtd.com>:
# ftp://jaguar.cs.utah.edu/pub/skill/skill-3.7.tar.Z
PATH=/bin:/usr/sbin:/usr/bin:/usr/local/bin
: ${EDITOR=/bin/vi} # Set default editor if blank.
export PATH EDITOR
umask 022
tag=`basename $0`
tmp=/tmp/skilltmp.$$
plist=/tmp/skillps.$$
trap "rm -f $tmp $plist" 0
trap "rm -f $tmp $plist; exit 1" ERR # ksh variants only
# ======================== FUNCTIONS =============================
#
# die: prints an optional argument to stderr and exits.
# A common use for "die" is with a test:
# test -f /etc/passwd || die "no passwd file"
# This works in subshells and loops, but may not exit with
# a code other than 0.
die () {
echo "$tag: error: $*" 1>&2
exit 1
}
# usage: prints an optional string plus part of the comment
# header (if any) to stderr, and exits with code 1.
usage () {
lines=`egrep -n '^# (NAME|AUTHOR)' $0 | sed -e 's/:.*//'`
(
case "$#" in
0) ;;
*) echo "usage error: $*"; echo ;;
esac
case "$lines" in
"") ;;
*) set `echo $lines | sed -e 's/ /,/'`
sed -n ${1}p $0 | sed -e 's/^#//g' |
egrep -v AUTHOR:
;;
esac
) 1>&2
exit 1
}
# version: prints the current version to stdout.
version () {
lsedscr='s/RCSfile: //
s/.Date: //
s/,v . .Revision: / v/
s/\$//g'
lrevno='$RCSfile: skill-solaris.sh,v $ $Revision: 1.3 $'
lrevdate='$Date: 2001/04/29 22:15:13 $'
echo "$lrevno $lrevdate" | sed -e "$lsedscr"
exit 0
}
# ======================== MAIN PROGRAM ==========================
# Defaults:
ac_help=
ac_prev=
ac_invalid="invalid option; use -h or --help to show usage"
argv=
# Initialize some variables set by options.
debug=n
int=n
dokill=y
sig=
for ac_option
do
# If the previous option needs an argument, assign it.
case "$ac_prev" in
"") ;;
*) eval "$ac_prev=\$ac_option"; ac_prev=; continue ;;
esac
case "$ac_option" in
-*=*) ac_optarg=`echo "$ac_option" |
sed 's/[-_a-zA-Z0-9]*=//'` ;;
*) ac_optarg= ;;
esac
# main switch
case "$ac_option" in
-d | -debug | --debug | --debu | --deb | --de) debug=y ;;
-h | -help | --help | --hel | --he) usage ;;
-i | -interact | --interac | --intera | --inter |\
--inte | --int )
int=y ;;
-n | -nokill | --nokill | --nokil | --noki | --nok | --no)
dokill=n ;;
-v | -version | --version | --versio | --versi | --vers)
version ;;
-[0-9]*) sig="$sig $ac_option" ;;
-di|-id) int=y; debug=y ;;
-dn|-nd) dokill=n; debug=y ;;
-in|-ni) dokill=n; int=y ;;
-din|-dni|-nid|-ndi|-idn|-ind) dokill=n; int=y; debug=y ;;
-*) die "$ac_option: $ac_invalid" ;;
*) case "$argv" in
"") argv="$ac_option" ;;
*) argv="$argv $ac_option" ;;
esac ;;
esac
done
case "$ac_prev" in
"") ;;
*) die "missing arg to --`echo $ac_prev | sed 's/_/-/g'`" ;;
esac
#
# Make sure we have something to look for.
#
case "$argv" in
"") echo "I need something to look for."; usage ;;
*) target="$argv" ;;
esac
#
# The default signal strategy is to use TERM, INT,
# and KILL on any processes.
#
case "$sig" in
"") sig="-15 -1 -9" ;;
*) ;;
esac
#
# Get the processes to kill. Edit the list before showing
# it so the -i, -d, and -n options can be used together.
# Use a separate file for the process list, so we don't
# include our own grep commands.
#
ps -ef | egrep -v " $$ " > $plist
egrep "$target" $plist > $tmp
test -s $tmp || die "No processes found."
case "$int" in
y) $EDITOR $tmp ;;
*) ;;
esac
case "$debug" in
y) echo "Signal(s): $sig Kill? $dokill"
echo "Interactive? $int Target: $target" ;;
*) ;;
esac
if test "$dokill" = "n" -o "$debug" = "y"
then
echo Not killing any of these:
echo
echo ' UID PID PPID C STIME TTY TIME CMD'
cat $tmp
case "$dokill" in
n) exit 0 ;;
*) ;;
esac
fi
#
# If we get this far, zap the process IDs.
#
pids=`awk '{print $2}' $tmp`
echo "killing:" $pids | fmt -77
for each in $sig
do
echo kill $each $pids
kill $each $pids
sleep 1
done
exit 0
from trey valenta:
"/usr/ucb/ps aux" shows cpu in the 3rd col. Or:
"/bin/ps -eo pid,cpu,comm" would get you the cpu usage in col2.
But you can take what you have and do:
/usr/bin/ps -eo pid,cpu,comm| awk '/netscape/{print $1,$2}'
and get the pid and cpu percentage.
******************************************************************************
from Stephan Grund:
Try something like:
kill `prstat 1 1 | awk '/netscape/{if(substr($9,0,length($9)-1)>90)print
$1}'`
******************************************************************************
from David Ledger:
prstat 1 1 | awk '/netscape/ { split($9, tmp, "%"); print tmp[1] }'
--
Gerard HENRY
LATP UMR 6632
_______________________________________________
sunmanagers mailing list
sunmanagers at sunmanagers.org
http://www.sunmanagers.org/mailman/listinfo/sunmanagers
More information about the summaries
mailing list