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
$
很好的答案。您也可以运行'pidof -x loop'来获取脚本名称的进程的PID。 – 2012-02-23 02:04:19
bash builtin'kill'绝对不接受职位名称,只要他们不含糊。 – 2012-02-23 02:09:47
不在我正在使用的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