我正在用一本叫做学习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
答案 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
$