藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 系統管理


    

藍森林 http://www.lslnet.com 2006年8月08日 13:08


如何殺進程?問題解決,謝謝sdccf及大家

縣局的維護員,基本上每天都要在主機上殺N多回進程
root
ps -t tty***
kill -9 ** * * * ***
exit
大家有沒有簡單一點的方法
比如說自己編的一個小程序或一句命令
帶個端口號的參數就能把此端口的進程殺了
先謝謝了

如何殺進程?問題解決,謝謝sdccf及大家

kill -9 `ps -t tty1`
這樣輸入一次就OK了.
或寫一個腳本.

如何殺進程?問題解決,謝謝sdccf及大家

我們是這樣處理的,編兩個文件,
文件1
trap "" 1 2 3
error_mesg="\n錯誤:序號選擇不正確."
while
clear
echo "\n\t\t\t   儲蓄網點激活服務 - "`tty|cut -c 9,10`
echo "\n\t\t   序號         所名        終端號"
echo "\t\t---------------------------------------"
echo "\t\t     1         1支             ttyp21"
echo "\t\t     2         2支             ttyp23"
echo "\t\t     3         3支             ttyp25"
echo "\t\t     4         4支             ttyp26"
echo "\t\t     5         5支             ttyp27"
echo "\t\t     6         6支             ttyp28"
echo "\t\t     7         7支             ttyp33"
echo "\t\t     8         8支             ttyp22"
echo "\t\t     9         9支             ttyp35"
echo "\t\t     10        10支            ttyp29"
echo "\t\t---------------------------------------"
echo "\t   輸入要激活的序號(打0退出):\c"
read post
do
if [ `echo $post|wc -c` -ge  2 ]  
then
      if [ $post -ge 0 -a $post -le 10  ]
        then
           case $post in
           1) hm="ttyp21" ;;
           2) hm="ttyp23" ;;
           3) hm="ttyp25" ;;
           4) hm="ttyp26" ;;
           5) hm="ttyp27" ;;
           6) hm="ttyp28" ;;
           7) hm="ttyp33" ;;
           8) hm="ttyp22" ;;
           9) hm="ttyp35" ;;
           10) hm="ttyp29" ;;
           0) exit ;;
           *) echo $error_mesg
              read pause
              continue ;;
           esac
           echo "\n\t\t\t   確定(Y/N):\c"
           read qdok
        
           if [ `echo $qdok|wc -c` -ge  2 ]  
           then
             if [ $qdok = "y" -o $qdok = "Y" ]
               then
                 /bin/killok `ps -t $hm |grep $hm`  
                 echo "\n信息:已經激活$hm"
                 read pasue
             fi
          fi
     else
           echo $error_mesg
           read pasue
     fi
else
           echo $error_mesg
           read pasue
fi
done


文件2
#/bin/sh
kill_id=""
kill_space=" "
until [ $# = 0 ]
do
        kill_id=$kill_id$kill_space$1
        shift
        shift
        shift
        shift
done
kill $kill_id
echo "\n\n$kill_id"
exit 0


賦予執行權限,放到/bin 下,執行文件1,選擇序號,即可殺其進程

如何殺進程?問題解決,謝謝sdccf及大家

多謝二位朋友,我去試試

如何殺進程?問題解決,謝謝sdccf及大家

遇見一個問題,別見笑,照二位朋友的方法都提示:
kill:pid 'tty21a' is not numeric
是什麼意思,應如何解決?
另外  二月二  朋友的程序中的這一句
/bin/killok `ps -t $hm |grep $hm`
執行時提示 killok 這裡出錯,也不太懂,請大家指點,謝謝!

如何殺進程?問題解決,謝謝sdccf及大家

文件2的名字就是killok!

如何殺進程?問題解決,謝謝sdccf及大家

文件2的名字就是killok!

如何殺進程?問題解決,謝謝sdccf及大家

原來是這樣
不過第一個問題還沒解決,再請大家講解一下,謝謝了
kill:pid 'tty21a' is not numeric  這個提示是什麼意思啊?

如何殺進程?問題解決,謝謝sdccf及大家

哪位大俠給個答覆嘛,謝謝了

如何殺進程?問題解決,謝謝sdccf及大家

他給的的那個命令沒有過濾掉非數字的字符。
kill 的參數必須數字,也就是進程號。
不過這個錯誤不會有什麼影響。

如何殺進程?問題解決,謝謝sdccf及大家

看來我只是浮於水面之上,沒窺得UNIX箇中奧秘!!

如何殺進程?問題解決,謝謝sdccf及大家

echo -n "輸入終端號:"
read ttyNO
ps -t $ttyNO|awk '{print "kill -9 " $1}'>;kill_pid
TMP=/tmp/tmpfile_$$
sed -e 's/kill -9 PID/           /g' < kill_pid >; $TMP
mv $TMP kill_pid
sort -d -r kill_pid>;killpid
sh killpid
rm kill_pid
rm killpid
echo  "完成!"

如何殺進程?問題解決,謝謝sdccf及大家

clear
while true
clear
do
echo "                                      "
echo "                                      "
echo "                                      "
echo "                                      "
echo "                                      "
echo "                                      "
echo "                   輸入終端設備名稱:\c"
read ttyname
ps -ef|grep $ttyname|awk '{if ($0 !~ "grep") print $2}'>;tty_tmp
if [ -s tty_tmp ]
then
#awk '{print $2}' tty_tmp>;tty_tmp1
#ps -ef|grep $ttyname|awk -v value=$ttyname '{if ($0 !~ "grep") print "ps -ef|grep " value}'>;tty_tmp
echo "ps -ef|grep " $ttyname>;tty_tmp
break
else
case $ttyname in
tty*)
awk -F: -v var=$ttyname '{if($4 ~ var) print "ps -ef|grep tty" $1}' /etc/inittab>;tty_tmp
break
;;
*)
echo "         無效終端設備名稱,回車繼續或者按delete鍵退出."
read test
clear
;;
esac
fi
done
if [ -s tty_tmp ]
echo "系統為您執行如下命令:\c"
then
cat tty_tmp
echo "如下進程正在運行中."
chmod 777 tty_tmp
./tty_tmp
while true
do
echo "殺死上敘述進程嗎(y/n)?\c"
read yorn
case $yorn in
y|Y)
./tty_tmp|awk '{print "kill -9 " $2}' >;tty_tmp1
sort -d -r tty_tmp1>;tty_tmp2
chmod 777 tty_tmp2
./tty_tmp2
exit
;;
n|N)
break
;;
*)
echo "無效選擇,退出!"
exit
;;
esac
done
else
echo "此終端無進程存在."
fi



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com