bash pid什么也没有返回

问题描述:

我正在学习一本名为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 

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