2012-02-23 149 views
2

我正在學習一本名爲bash shell的書。一切都很好,直到我遇到kill命令。我創建了一個名爲loop的小腳本,然後使用loop &運行它。當我使用kill %loop,然後使用ps -e | grep loop,過程仍然存在。我是不是殺了它?我必須使用kill -9嗎?此外,當我使用pidof loop時,pidof似乎不起作用。它什麼也沒有返回。bash pid什麼也沒有返回

我使用Ubuntu和bash。雖然我覺得劇本不應該的問題,這是以防萬一:

#! /bin/bash 
# Just a script 
while true; do 
    sleep 60 
done 

回答

2

shell腳本不作爲腳本的名稱來運行。它們作爲您在shebang中指定的shell的名稱運行。在你的情況下,這是/bin/bash。如果你已經完成了pidof bash,你會得到腳本的pid(以及當時運行的所有其他bash腳本)。

話雖這麼說,你不能用自己的名字殺腳本,你與kill %loop嘗試。殺死只接受pid。如果您使用的是%表示法,則表示由shell指定的內部作業編號。例如,使用您的循環腳本作爲示例:

$ ./loop & <-- first run of loop script 
[1] 8077 <--- job #1, running as pid 8077 
$ ./loop & <--- second run of loop script 
[2] 8079 <-- job #2, running as pid 8079 
$ jobs 
[1]- Running     ./loop & 
[2]+ Running     ./loop & 
$ kill %2 
$ jobs 
[1]- Running     ./loop & 
[2]+ Terminated    ./loop <-- note, showing 'terminated' now 
$ kill -9 8077 
$ jobs 
[1]+ Killed     ./loop 
$ jobs 
$ 
+0

很好的答案。您也可以運行'pidof -x loop'來獲取腳本名稱的進程的PID。 – 2012-02-23 02:04:19

+1

bash builtin'kill'絕對不接受職位名稱,只要他們不含糊。 – 2012-02-23 02:09:47

+0

不在我正在使用的bash上:'kill%loop' - >'bash:kill:%loop no such job',on'GNU bash,version 3.00.15(1)--release(i386-redhat- Linux的GNU)' – 2012-02-23 02:12:12