我正在通过一本名为《学习 bash shell》的书来学习 bash。一切都很顺利,直到我遇到 kill
命令。我创建了一个名为 loop
的小脚本,然后使用 loop &
运行它。当我使用kill %loop
时,然后使用ps -e | grep循环
,进程还在。那我是不是没杀掉它?我必须使用 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 分配的内部作业号。例如,使用循环脚本作为示例:
$ ./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
$
关于Bash pid 根本不返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9405910/