自动杀超时终端、僵尸进程的shell程序.doc自动杀超时终端、僵尸进程的shell程序.doc
### shell程序名:chk_tty
### 功能一、找出非正常退出而导致系统内出现僵尸进程,这种进程有时会不
停地向CPU提出请求,导致CPU空闲率总为0;
### 功能二、找出超时登录的终端;
TTY=`tty |awk -F '/' '{print $3}'` N=0
cat /dev/null >> chk_tty.log
while [ 1 ]
do
TIME=`date '+%Y%m%d-%H:%M:%S'`
echo $TIME
sar -...
自动杀超时终端、僵尸进程的shell程序.doc
### shell程序名:chk_tty
### 功能一、找出非正常退出而导致系统内出现僵尸进程,这种进程有时会不
停地向CPU提出请求,导致CPU空闲率总为0;
### 功能二、找出超时登录的终端;
TTY=`tty |awk -F '/' '{print $3}'` N=0
cat /dev/null >> chk_tty.log
while [ 1 ]
do
TIME=`date '+%Y%m%d-%H:%M:%S'`
echo $TIME
sar -u 1 2
#非正常退出检查
TTYN_A=`who |grep ttyp |awk -F ' ' '{print $2}'|sort|uniq|wc -l| \
awk -F ' ' '{print $1}'`
TTYN_B=`ps -ef|grep ttyp|grep -v tty0|grep -v tty1| \
grep -v login -c -p|awk -F ' ' '{print $6}'| \ sort|uniq|wc -l|awk -F ' ' '{print $1}'` echo TTYN_A=$TTYN_A TTYN_B=$TTYN_B cat /dev/null >tmp_tty.sh
if [ $TTYN_A != $TTYN_B ]
then
ps -ef | grep ttyp|awk -F ' ' '{printf sh chkttysh %s\n,$6}'| \
sort|uniq |grep -v $TTY$>tmp_tty.sh sh tmp_tty.sh; #rm tmp_tty.sh
fi
# 超时登录检查
sleep 5
cat /dev/null >tmp_outtime.sh
who -u|grep ttyp|grep -v ^root|grep -v ^cbps| \ grep -v rewrite|grep -v ' \. '|grep :|sed s/://g| \ awk -F ' ' '{if ($6>40) printf killout %s %s 40\n,$2,$7; }' >tmp_outtime.sh
sleep 1
sh tmp_outtime.sh; #rm tmp_outtime.sh sar -u 1 2
echo sleep 199;sleep 199
done
### shell程序名:chkttysh
### 功能:对chk_tty检出的进程判断,符合即杀出;
TY=$1
FLAG=`ps -f -t $TTY | grep login -c -p|wc -l|awk -F ' ' '{print $1}'`
if [ $FLAG -lt 1 ]
then
TODAY=`date '+%Y%m%d-'`
USER=`ps -f -t $TTY|grep ttyp|awk -F ' ' '{print $1}'` USER_ID=`ps -f -t $TTY|grep ttyp|awk -F ' ' '{print $2}'` USERTIME=`ps -f -t $TTY|grep ttyp|awk -F ' ' '{print $5}'|cut -b1-8`
SYSCALL=`sar -c 1 2|grep Average|awk -F ' ' '{print $2}'` if [ x$USERTIME != $USERTIME -a $SYSCALL -gt 50000 ] then
grep $TODAY /etc/term.log|grep $TTY|grep $USER|grep $USER_ID STR_FLAG=`grep $TODAY chk_tty.log|grep $TTY|grep $USER|grep $USER_ID$`
echo $TODAY $USER ID=$USER_ID $USERTIME $TTY SYSCALL=$SYSCALL
if [ x$STR_FLAG = x ]
then
echo |x$STR_FLAG| |x|
grep $TODAY /etc/term.log|grep $TTY|grep $USER|grep $USER_ID >> chk_tty.log
fi
# 杀出,此功能要慎重使用,如错杀进程,会导致系统崩溃
if [ $USER_ID -gt 100 ]
then grep $TODAY /etc/term.log|grep $TTY|grep $USER|grep $USER_ID
echo kill -9 $USER_ID
kill -9 $USER_ID
fi
echo $TTY is Death processes ! Killed ! >tmp_chkttysh.txt wrtty tmp_chkttysh.txt; sleep 1
echo >tmp_chkttysh.txt
n=5
while [ $n -gt 0 ]
do
wrtty tmp_chkttysh.txt; sleep 1
n=`expr $n - 1`
done
fi
rm tmp_chkttysh.txt
fi
### shell程序名:killout
### 功能:杀终端
if [ $# -lt 3 ]
then echo format: killout ttyp ID OUT_M
exit
fi
TTY=$1
ID_A=$2
OUT_M=$3
TIME=`date '+%Y%m%d-%T '`
# 确保所杀进程正确,避免误杀造成系统崩溃
ID_B=`ps -f -t $TTY | grep login -c -p$ |awk -F ' ' '{print $2}'`
N_line=`ps -f -t $TTY |wc -l|awk -F ' ' '{print $1}'`
# 如果传递来的进程号与 ps 命令查到的进程号不杀出;
# 如果指定终端进程少于 3 个不杀出;
# 如果传送来的进程号是空值不杀出;
# 如果传送业的进程号小于 100 不杀出;
#if [ $ID_A != $ID_B -o $N_line -lt 3 -o x$ID_A = x -o $ID_A -lt 100 ]
if [ $ID_A != $ID_B -o $N_line -lt 3 -o x$ID_A = x ]
then
echo $TIME >>killout.err
echo ID_A=$ID_A ID_B=$ID_B N_line=$N_line >>killout.err
who -u |grep $tty >> killout.err ps -f -t $TTY >> killout.err sleep 1
exit
fi
echo >/dev/$TTY
echo >/dev/$TTY
echo >/dev/$TTY
echo >/dev/$TTY
echo \r 中 心 通 告 >/dev/$TTY
echo >/dev/$TTY
echo \r$TTY 用户: >/dev/$TTY
echo >/dev/$TTY
echo \r 因此终端空闲时间超过 $OUT_M 分钟,所以被强制退出,登录记录如下!!! >/dev/$TTY
echo >/dev/$TTY
echo \r 监测时间:$TIME >/dev/$TTY
echo \r
w -x |grep $TTY >/dev/$TTY echo >/dev/$TTY
echo 要显示正在进行的操作请按 CTRL+R 进行屏幕刷新 >/dev/$TTY echo >/dev/$TTY
echo $TIME\c >>outtime.log w -x |grep $TTY >>outtime.log onstat -u |grep $TTY |awk -F ' ' '{print $3}'|sed s/^/onmode -z
/ >tmp_sessid.sh
sh tmp_sessid.sh
kill -9 $ID_A
### shell程序名:wrtty
### 功能:与sco5.0下wall,好处是只显示自己希望显示的
。 if [ $# -lt 3 ]
then echo format: killout ttyp ID OUT_M exit
fi
TTY=$1
ID_A=$2
OUT_M=$3
TIME=`date '+%Y%m%d-%T '`
# 确保所杀进程正确,避免误杀造成系统崩溃
ID_B=`ps -f -t $TTY | grep login -c -p$ |awk -F ' ' '{print $2}'`
N_line=`ps -f -t $TTY |wc -l|awk -F ' ' '{print $1}'`
# 如果传递来的进程号与 ps 命令查到的进程号不杀出;
# 如果指定终端进程少于 3 个不杀出;
# 如果传送来的进程号是空值不杀出;
# 如果传送业的进程号小于 100 不杀出;
#if [ $ID_A != $ID_B -o $N_line -lt 3 -o x$ID_A = x -o $ID_A -lt 100 ]
if [ $ID_A != $ID_B -o $N_line -lt 3 -o x$ID_A = x ]
then
echo $TIME >>killout.err
echo ID_A=$ID_A ID_B=$ID_B N_line=$N_line >>killout.err
who -u |grep $tty >> killout.err ps -f -t $TTY >> killout.err sleep 1
exit
fi
echo >/dev/$TTY
echo >/dev/$TTY
echo >/dev/$TTY
echo >/dev/$TTY
echo \r 中 心 通 告 >/dev/$TTY
echo >/dev/$TTY
echo \r$TTY 用户: >/dev/$TTY
echo >/dev/$TTY
echo \r 因此终端空闲时间超过 $OUT_M 分钟,所以被强制退出,登录记录如下!!! >/dev/$TTY
echo >/dev/$TTY
echo \r 监测时间:$TIME >/dev/$TTY
echo \r
w -x |grep $TTY >/dev/$TTY echo >/dev/$TTY
echo 要显示正在进行的操作请按 CTRL+R 进行屏幕刷新 >/dev/$TTY echo >/dev/$TTY
echo $TIME\c >>outtime.log
w -x |grep $TTY >>outtime.log
onstat -u |grep $TTY |awk -F ' ' '{print $3}'|sed s/^/onmode -z
/ >tmp_sessid.sh
sh tmp_sessid.sh
kill -9 $ID_A
本文档为【自动杀超时终端、僵尸进程的shell程序.doc】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。