kill指令一問

Debian 有很多實用的工具如: apt 系列 、 update- 系列,但是我們卻常常忽略了!這個版就是要大家一起來分享您在使用 debian 特殊指令的經驗!請大家共襄盛舉囉!注意不要在此提問問題喔!

kill指令一問

文章tako761208 » 週五 11月 20, 2009 9:41 am

請問若我想寫一的kill指令的shelll去終止我在執行的程式
kill 程式要先知道程式的 PID
但是我每次執行同一個程式時它的PID都不同
那請問我要如何寫一個shell讓它能將執行的程式終止

簡單的說
我的程式(假設為A)

但是A在執行的時候,每次的PID都不同

如何寫一個shell透過kill指令去終止A程式
tako761208
可愛的小學生
可愛的小學生
 
文章: 34
註冊時間: 週四 5月 21, 2009 1:11 am

Re: kill指令一問

文章訪客 » 週五 11月 20, 2009 11:05 am

1.ps aux會列成主機上所有程序的資訊
example:
........................
XXXXXX 7714 4.2 1.4 602080 87236 ? Sl 09:57 0:15 /usr/lib64/firefox-3.0.12/firefox -UILocale zh-TW
..........................
2.用shell找到那隻程序的那一行,用sed或awk都可.

3.程序的ID只要取得那行的第2欄(用sed or awk)

示範全用sed來取得firefox程序的ID(先打開firefox)
代碼: 選擇全部
 ps aux|sed -n "/firefox/p"|sed -n "s/^[^ ]\{0,100\}//p"|sed -n "s/^[ ]\{0,100\}//p"|sed -n "s/ .*//p"

講解
| 這是pipe(管線),就是會把處理後丟給下一指令處理
sed -n "/firefox/p" 找到含firefox那行
sed -n "s/^[^ ]\{0,100\}//p" 把開頭一組100以內不含空字元的字串消掉
sed -n "s/^[ ]\{0,100\}//p" 把開頭100以內空格消掉
sed -n "s/ .*//p" 把空格以後任何字元消掉

結果最後就像這樣:

7686
7714
10819


注意最後那個ID,是這隻shell本身ID

當然寫法不只一種,用awk會簡單多了




tako761208 寫:請問若我想寫一的kill指令的shelll去終止我在執行的程式
kill 程式要先知道程式的 PID
但是我每次執行同一個程式時它的PID都不同
那請問我要如何寫一個shell讓它能將執行的程式終止

簡單的說
我的程式(假設為A)

但是A在執行的時候,每次的PID都不同

如何寫一個shell透過kill指令去終止A程式
訪客
 

文章訪客 » 週五 11月 20, 2009 11:12 am

補充一下,其實知道名字就可砍

killall firefox

但是這樣彈性差
會砍掉有關firefox的所有程序
訪客
 

文章tako761208 » 週五 11月 20, 2009 5:11 pm

感謝~其實我用過awk去執行過!!
但是我的平台好像沒有awk這個指令
我現在也正在使用killall去試試看!!
感謝您的回文!!
tako761208
可愛的小學生
可愛的小學生
 
文章: 34
註冊時間: 週四 5月 21, 2009 1:11 am

文章訪客 » 週五 11月 20, 2009 5:29 pm

是那一版Linux,awk只是一個套件,預設都有裝上去,有連上網的話
1.deb的話(ubuntu debian)
apt-get install awk
2.rpm的話(rehat fedora centos gentoo)
yum install awk

不然google找個套件下來裝就好
訪客
 

文章阿信 » 週六 11月 21, 2009 11:54 am

可以用pidof 這個指令。 busybox也有該指令

for pid in `pidof program`
do
kill -9 $pid
done
頭像
阿信
版面大總管
版面大總管
 
文章: 4756
註冊時間: 週二 9月 03, 2002 11:58 pm
來自: 台灣 - 嘉義


回到 debian command

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客