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

时间:2017-08-03 21:13:12

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

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

所以,我想弄清楚的是正在运行的某个命令的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的CPU使用率一直在25%(而不是通常为0%或1%),当我输入ps au时,我实际上可以看到命令和PID。

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

2 个答案:

答案 0 :(得分:1)

感谢@glennjackman,我设法通过一个简单的pid=$(pgrep search_word)获得了我想要的PID。起初它不起作用,但不知怎的,我经过一些试验和错误后才能使它工作。对于那些想要对变量进行PID的人,只需输入

即可

screen -ls

关于var a, b, c = ...; while (condition) { // Change a, b, c... } // Use a, b, c 没有显示我的分离会话的问题,它仍然没有解决,但我并不为此烦恼。再次感谢您解决我的问题@glennjackman!

编辑:

第二个问题解决了,请查看关于berends的评论。

答案 1 :(得分:0)

您可以通过编写(例如)

轻松找到所有正在运行的进程及其PID
ps aux

该过程由屏幕运行,因此您可以通过编写以下内容来更轻松地找到它:

ps aux | grep screen

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

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