【问题标题】:How to find the PID of a running command in bash?如何在 bash 中找到正在运行的命令的 PID?
【发布时间】:2017-08-03 21:13:12
【问题描述】:

我用谷歌搜索了这个问题,但从未发现任何对我的特殊情况有用的东西。

所以,我要弄清楚的是某个正在运行的命令的 PID,因此我可以在必要时将其终止。我知道可以通过输入 echo $! 来获取命令的 PID,所以应该是

my_command & echo $!

应该给我PID。但事实并非如此,我想我知道为什么: 我的命令如下:

screen -d -m -S Radio /path/to/folder -f frequency -r path/to/song

首先打开一个分离的screen,然后键入命令,以便它被执行并继续在后台运行。这样echo 显示给我的PID 是错误的。我猜它显示了screen -d -m -S Radio /path/to/folder -f frequency -r path/to/song 的 PID,而不是在屏幕创建的新终端中运行的命令的 PID。

但还有一个问题:当我在终端中运行screen -ls 时,后台运行的命令没有出现!我相当肯定它正在运行,因为 Pi 一直处于 25% 的 CPU 使用率(而不是通常的 0% 或 1%),当我输入 ps au 时,我实际上可以看到命令和 PID。

所以现在我打电话给社区:关于如何在新终端中找到该特定命令的 PID 有什么想法吗?我正在编写一个 bash 脚本,因此必须可以通过代码获取 PID。完美的是将 PID 存储在变量中的命令!

【问题讨论】:

  • SO 是针对编程问题,而不是关于使用或配置 Linux 的问题。 SuperUser.com 或 unix.stackexchange.com 将是解决此类问题的更好地方。
  • pgrep -f search_pattern -- 如果输出供人类使用,则添加 -l 标志。
  • 感谢@glennjackman,您的评论对我有用。不知何故,我现在有了命令的 PID!

标签: linux bash raspberry-pi3 pid gnu-screen


【解决方案1】:

感谢@glennjackman,我设法通过简单的pgrep search_word 获得了我想要的PID。起初它不工作,但不知何故,经过一些试验和错误,我让它工作了。对于那些想要变量 PID 的人,只需键入

pid=$(pgrep search_word)

关于screen -ls 没有显示我的分离会话的问题,它仍然没有解决,但我并不为此烦恼。再次感谢@glennjackman 解决我的问题!

编辑:

第二个问题解决了,检查 berends 答案上的 cmets。

【讨论】:

    【解决方案2】:

    您可以通过编写(例如)轻松找出所有正在运行的进程及其PID:

    ps aux
    

    该过程是按屏幕运行的,因此您可能会发现它更容易编写:

    ps aux | grep screen
    

    有关 ps 和我使用的参数的更多信息检查(快速谷歌)-> https://www.lifewire.com/g00/uses-of-linux-ps-command-4058715?i10c

    编辑:您也可以将此命令与 bash 脚本一起使用。

    【讨论】:

    • 谢谢。 grep 以某种方式帮助了我,但正如我所说:我需要它在脚本中。我知道如何在终端上自己找到它,但我需要我的脚本知道它的 PID,并且在脚本中写 ps aux | grep screen 并没有多大帮助......而且,总会有至少两个结果以我为例。
    • 好吧,让我们退后一步,如果它在屏幕中运行 - 您应该能够使用 screen -ls 看到它。您是否以与拥有 screen 会话的用户相同的用户身份运行 screen -ls 命令?
    • 老实说,我不知道......我知道我的树莓派(用户 Pi)上只有一个用户,并且终端总是有pi@raspberrypi。所以我假设是的,我以同一个用户身份运行它。
    • 你手动启动屏幕了吗?我真的会首先尝试弄清楚这一点,因为我想不出任何其他原因为什么您无法使用 screen -ls 看到它,而不是它作为另一个用户运行或根本不运行。检查 /var/run/screen 里面有什么,你应该可以在那里找到每个用户下的所有屏幕。
    • 在脚本中使用 ps 在有替代方案时不被认为是好的形式——它非常容易出错; grep foo 可能会找到运行 vim foo.conf 的人。 BashFAQ #33 讨论了替代方案(特别是,如果上下文是任何类型的守护进程管理,应如何使用这些进程;ProcessManagement 也是相关的)。
    猜你喜欢
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    相关资源
    最近更新 更多