首页 > 学技术 > 技术网文 > Linux Shell > 正文

[保留] [原创]清除指定终端所有进程的脚本


来源 chinaunix.net 酷勤网整理

功能如题,支持多参数,-h为简单介绍,请各位拍砖吧,谢谢

#!/bin/ksh

#清除指定终端所有进程的shell   V050721
#改进为支持命令行多参数,即可一次性kill多个指定的tty进程 V070521 
#改进多tty时显示排列问题 V050825
#修正普通用户使用时的BUG及改进界面 V050926
#再次精简代码  V051011

echotty()
{
echo
n=0
for i in `echo $*`
do
((n=n+1))
test $((n%6)) -eq 0 && printf "\n\n%5s"$i  || printf "%5s"$i
done
}

#trap "rm $HOME/killpid >/dev/null 2>&1 ; tput sgr0 ; echo ; exit 0" 0 1 2 3 9 15
clear
tput bold

if [ "$1" = '-h' ]
then
tput cup 5 10
echo "     清除指定终端所有进程的shell            V050628\n  "
echo "***本shell由乐山市沙湾区邮政局宋涛调试成功,感谢使用 ^_^ ***"
echo 
echo 
echo "调用格式:   "`basename $0` "[ -h ] [ 终端号 ]" 
echo "      -h:   帮助"
echo "  终端号:   欲清除死进程的终端号\n"  
echo "  例: `basename $0` ttyp1   #杀死终端ttyp1所有进程\n   "
echo '此时一般用此shell清除该终端所有进程后终端可恢复正常登陆;'
echo '若还是不能登陆,可由root做 >/dev/死锁终端 (此时终端必须'
echo "是开机状态),还是不行时请重启,还是不行请报警,呵呵\n"
exit 0
fi

if [ $# -eq 0 ]
then 
echo "\n────────────── 清除指定终端进程─────────────"
test  $(logname) = "root" && { ttyname=$(who | awk '{printf("\n%20s\n",$2)}') ; user="root" ;  } \
|| { ttyname=$(who | grep $(logname) | awk '{printf("\n%20s\n",$2)}') ; user="user" ; }
echotty $ttyname
echo "\n\n ───────────────────────────────────"
echo "\n请输入要杀死进程的终端: \c"
read zdh
test  "$zdh" = "q" &&  exit 0 
else 
test `logname` = "root" && user="root" || user="user"
zdh=$*
fi 

for kt in $zdh
do
if [ "$user" = "root" ]
then
ps -t $kt|grep -v PID|awk '{print "kill -9 " $1 | "sort -k3 -nr > $HOME/killpid" }' 
else
ps -t $kt|grep -v PID|awk '{print "/tcb/bin/asroot kill -9 " $1 | "sort -k3 -nr > $HOME/killpid"}' 
fi

sh $HOME/killpid >/dev/null 2>&1
end=$?
test -e /etc/fuser -o -x /etc/fuser && fuser /dev/$kt >/dev/null 2>&1
test $end -eq 0 && echo "\n          清除 ${kt} 进程成功\n" || \
echo "\n          清除 ${kt} 进程失败\n"
done




 寂寞烈火 回复于:2005-10-11 22:30:43

linux下有个pkill,可以通过进程名来杀,例如:
pkill -9 procname


 wmjie 回复于:2005-10-12 01:03:02

styr兄:
ps -t $kt|grep -v PID|awk '{print "kill -9 " $1 " }' |sh

直接在后面用管道加个sh可否??:mrgreen: 


 烈火兄的pkill不错 :em02:  :em02:  :em02:  :em02:  :em02:


 styr 回复于:2005-10-12 11:25:36

偶只有sco.....pkill只能学记下来,以后有机会就用了。

还要 sort -k3 -nr  ,PID从大到小开始kill




原文链接:http://bbs.chinaunix.net/viewthread.php?tid=625602
转载请注明作者名及原文出处



收藏本页到: