繁体   English   中英

如何在 bash 中找到正在运行的命令的 PID?

[英]How to find the PID of a running command in bash?

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

所以,我想弄清楚的是某个正在运行的命令的 PID,所以我可以在必要时杀死它。 我知道可以通过键入echo $! 所以据说

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,而不是在 screen 创建的新终端中运行的命令的 PID。

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

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

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

pid=$(pgrep search_word)

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

编辑:

第二个问题已解决,请查看有关 berends 答案的评论。

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

ps aux

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

ps aux | grep screen

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM