Bash pid根本不返回任何内容

时间:2012-02-23 01:36:12

标签: bash ubuntu kill

我正在用一本叫做学习bash shell的书学习bash。一切顺利,直到我遇到kill命令。我创建了一个名为loop的小脚本,然后使用loop &运行它。当我使用kill %loop,然后使用ps -e | grep loop时,流程仍然存在。所以我没有杀死它?我必须使用kill -9吗?此外,当我使用pidof时,pidof loop似乎根本不起作用。它根本不返回任何内容。

我正在使用Ubuntu和bash。虽然我认为脚本无关紧要,但这只是以下情况:

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

1 个答案:

答案 0 :(得分:2)

Shell脚本不会作为脚本的名称运行。它们作为您在shebang中指定的shell的名称运行。在你的情况下,那是/bin/bash。如果你已经完成了pidof bash,你就得到了你的脚本的pid(以及当时运行的所有其他bash脚本)。

话虽这么说,但是当你尝试使用kill %loop时,你不能按名字杀死脚本。杀死只接受pids。如果您使用的是%表示法,那么它指的是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
$