Bash-pid完全不返回任何内容
我在学习bash时读了一本名为《学习bashshell》的书。一切都很好,直到我遇到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
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循环工作得很有魅力。非常感谢。