个别telnet上来的用户没有正常退出应用程序,直接关闭telnet程序,保险的应用程序可能屏蔽了一些信号,结果这些失去父进程的可怜孩子,只好用频繁的cpu活动来回报操作系统。 经检查这些进程有个特点,就是ps显示有终端号,但是在who输出中没有该终端,根据这个属性,编写了查杀脚本:
ps -e -o tty | grep -v -E "\-| |TT" | awk '{ print $1 }'| sort | uniq > /tmp/ps_out.$$ who | awk '{ print $2 }' | sort > /tmp/who_out.$$ for tty in `diff /tmp/ps_out.$$ /tmp/who_out.$$ | grep "<.*pts" | cut -c3-` do username=`ps -t pts/0 -o user= | awk '{ print $1 }'` if [ x$username != "xroot" ] && [ x$username != "xinformix" ] then ps uxt $tty if [ $? -eq 0 ] && ! ( who | grep $tty ) then echo "=========================================" echo kill -9 `ps -t $tty -o pid=` echo "=========================================" fi fi done rm /tmp/ps_out.$$ /tmp/who_out.$$