【问题标题】:Getting Process ID Linux using pgrep使用 pgrep 获取进程 ID Linux
【发布时间】:2020-08-10 09:23:41
【问题描述】:

我有一个名为 run.sh 的 bash 脚本,它启动两个 python 脚本 meter_1.pymeter_2.py

#!/bin/sh

./meter_1.py &
./meter_2.py &

当脚本运行时,我使用命令搜索脚本的 PID

ps -aux | grep python

输出是

openhab+  9328 84.0  1.6  25320 16580 pts/0    R    22:23   0:04 python ./meter_1.py
openhab+  9329 84.6  1.6  25320 16596 pts/0    R    22:23   0:04 python ./meter_2.py

使用 pgrep 命令我可以得到 PID

>pgrep python 
9328 
9329 

但是我可以运行多个 python 脚本,我想通过它运行的脚本获取进程 ID 名称,而不是基于它是否是 python。

例如:

>pgrep python" "./meter_1.py
9328 

pgrep 中是否有此功能?以下似乎可行,但最好只取回进程 ID。

>ps -aux | grep python" "./meter_1.py
openhab+  9328 84.0  1.6  25320 16580 pts/0    R    22:23   0:04 python ./meter_1.py

【问题讨论】:

  • 添加-l选项或与-a结合
  • 不幸的是-l刚刚放弃了<PID> python

标签: linux bash command-line grep


【解决方案1】:

在 ba(sh) 中,您可以使用 $! 获取上次启动进程的 PID

所以在你的run.sh 脚本中你可以简单地使用:

#!/bin/sh

./meter_1.py &
echo PID of process1: $!
./meter_2.py &
echo PID of process2: $!

【讨论】:

  • 这是一个不错的解决方案,但我不需要立即使用 PID,它可能是在我启动许多其他进程后 X 分钟/小时后。我可以用它把它写到一个文件中,但是我必须维护一个单独的 PID 文件,当然必须是某种方式来获取你需要的 PID。
  • 通常在开发应用程序时,每个进程的 PID 都会写入 lock file,并得到维护,因此您可以在需要时轻松找到所需的 PID,即刻或稍后...
  • 谢谢罗恩,我现在将使用您的解决方案的变体来写入文件,如果没有人有办法立即获得它,我将在明天将您的解决方案标记为看看是否还有更多答案。
【解决方案2】:

如果您可以控制流程,例如您是在脚本中启动流程的人,则可以扩展已发布的内容。

#!/bin/sh
./meter_1.py & meter_1_py_pid=$!
./meter_2.py & meter_2_py_pid=$!

pid 在变量 $meter__1_py_pid$meter__2_py_pid 中 你可以对 pid 做任何你想做的事情,检查它是否正在运行,杀死它等等。

【讨论】:

  • 感谢您的反馈!为了解释更多,我将使用它们来终止进程并在更新另一个 JSON 文件时重新启动它们,或者如果文件不需要更新只是为了确保它们仍在运行而不是启动进程的 2 个实例.
  • 好的,所以您可能需要为您的进程加锁,以确保一次只运行一个。有关一些信息和提示,请参阅 mywiki.wooledge.org/ProcessManagement,我在那里发现了很多有用的东西,我仍在使用并将使用。
  • 这个链接非常有用,谢谢,我最终从另一个 python 脚本启动进程并将 PID 存储在 JSON 文件中,这样我就可以检查它们是否仍在运行。我有点压力,因为这是最后一年的项目,但我肯定会为未来的项目研究锁定文件!
猜你喜欢
  • 1970-01-01
  • 2011-04-15
  • 2011-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多