2017-08-03 57 views
0

这是我第一次在这里问,所以请裸露在我身边。我已经使用了这个问题,但从未发现任何对我的特殊情况有用的东西。如何在bash中找到运行命令的PID?

所以,我想弄清楚一个特定命令的PID正在运行,所以我可以在必要时杀死它。我知道这是可能通过键入echo $!所以理应

my_command & echo $!

应该给我的PID得到命令的PID。但是,这是不是这样,我想我知道为什么: 我的命令如下:

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

以使之得到执行打开分离screen第一,然后类型的命令,并不断在后台运行。这样,echo显示我的PID是错误的。我猜测它显示我的PID为screen -d -m -S Radio /path/to/folder -f frequency -r path/to/song,而不是由屏幕创建的新终端中运行的命令的PID。

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

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

在此先感谢!

+0

SO用于编程问题,而不是关于使用或配置Linux的问题。 SuperUser.com或unix。stackexchange.com将是更好的地方这样的问题。 – Barmar

+0

'pgrep -f search_pattern' - 如果输出用于人类消费,则添加'-l'标志。 –

+0

谢谢@glennjackman,您的评论为我工作。不知怎的,我现在有命令的PID! – Zebiano

回答

0

感谢@glennjackman我设法使用简单的pgrep search_word获得我想要的PID。起初它不工作,但不知何故,我经过一些试验和错误后才开始工作。适合那些希望变量的PID,只需键入

pid=$(pgrep search_word)

关于与screen -ls显示的不是脱离会议的问题,仍然没有得到解决,但我不与它困扰。再次感谢您解决我的问题@glennjackman!

编辑:

其次的问题解决了,检查的评论对BERENDS回答。

0

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

ps aux 

过程由屏幕上运行,所以你也许可以找到它更容易写:

ps aux | grep screen 

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

编辑:您可以使用bash脚本命令为好。

+0

谢谢。 grep以某种方式帮助我,但正如我所说:我需要它在脚本中。我知道如何在终端上自己找到它,但是我需要我的脚本来知道它的PID并编写'ps aux | grep screen'在脚本中没有多大帮助......而且,在我的情况下,该命令总是会有至少两个结果。 – Zebiano

+0

好吧,让我们退后一步,如果它在屏幕上运行 - 您应该能够使用屏幕-ls看到它。你是否像拥有屏幕会话的用户一样运行screen -ls命令? – berend

+0

说实话,我不知道......我知道我的raspberrypi(用户Pi)上只有一个用户,并且终端总是有'pi @ raspberrypi'。所以我假设是,我正在以同一用户的身份运行它。 – Zebiano