Bash-pid完全不返回任何内容

Bash-pid完全不返回任何内容,bash,ubuntu,kill,Bash,Ubuntu,Kill,我在学习bash时读了一本名为《学习bashshell》的书。一切都很好,直到我遇到kill命令。我创建了一个名为loop的小脚本,然后使用loop&运行它。当我使用kill%loop,然后使用ps-e | grep loop时,进程仍然存在。所以我没能杀了它?我必须使用kill-9?而且,当我使用pidof循环时,pidof似乎根本不起作用。它什么也不返回 我正在使用Ubuntu和bash。虽然我认为剧本不重要,但这里只是以防万一: #! /bin/bash # Just a script w

我在学习bash时读了一本名为《学习bashshell》的书。一切都很好,直到我遇到
kill
命令。我创建了一个名为
loop
的小脚本,然后使用
loop&
运行它。当我使用
kill%loop
,然后使用
ps-e | grep loop
时,进程仍然存在。所以我没能杀了它?我必须使用
kill-9
?而且,当我使用
pidof循环时,
pidof
似乎根本不起作用。它什么也不返回

我正在使用Ubuntu和bash。虽然我认为剧本不重要,但这里只是以防万一:

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

Shell脚本不会作为脚本的名称运行。它们以您在shebang中指定的shell的名称运行。在您的例子中,这是
/bin/bash
。如果您完成了
pidof bash
,您将获得脚本的pid(以及当时运行的所有其他bash脚本)

也就是说,您不能按脚本的名称终止脚本,因为您正在尝试使用
kill%loop
。Kill只接受pid。如果您使用的是
%
符号,那么它指的是shell分配的内部作业编号。e、 g,以循环脚本为例:

$ ./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循环
,以通过脚本名称获取进程的pid。bash内置
kill
绝对接受作业名称,只要它们不含糊。在我使用的bash上不接受:
kill%loop
->
bash:kill:%loop没有这样的作业
,在
GNU bash,版本3.00.15(1)-发布(i386 redhat linux gnu)
@evilotto是的,这就是为什么当我有几个循环作为后台作业运行时不能使用kill%loop:P@MansoorSiddiquipidof-x循环工作得很有魅力。非常感谢。