Bash pid 根本不返回任何内容

标签 bash ubuntu kill

我正在通过一本名为《学习 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/

相关文章:

linux - 根据修改时间在 Linux 中查找文件

php - 限制服务器访问

perl - 在 Ubuntu 中从 perl 脚本运行 Tcl(期望)脚本的命令

.net - 程序终止自身进程的正确方法是什么(Windows)

C - 获取用 popen 打开的进程的 PID

windows - 如果 Windows 中存在进程则终止

bash - 将与模式匹配的行移动到上一行

bash - 获取 sibling 的PID

bash - Dockerfile 中 CMD ["bash"的作用

linux - 安装 Apache Spot