所以我有几个python程序说程序A和程序B,当使用“pgrep python”获取pid时,它给了我程序A和程序B的pid。但是,我正在编写一个程序,需要找到程序 B 的 pid,但不是程序 A 的 pid。我的计划是让程序运行控制台命令“pgrep”来获取 pid。然而,由于它获取了两个 pid,并且它无法区分两者之间的区别(我知道)
那么我怎样才能确保我得到程序B的pid而不是程序A呢?
答案1
一种选择是启动程序B的进程可以在执行此操作后检索PID并将其保存在某处的文件中(例如,/var/run/
通常包含此类X.pid
文件)。一种方法是将程序 B 从脚本启动到后台,然后检查 shell 变量$!
,如下所示:
ProgramB &
B_PID=$!
通常,使用此策略,X.pid
文件可能会过时——也就是说,启动的进程可能会在X.pid
文件未被删除的情况下死亡,并且该 PID 甚至可能被其他进程回收。如果在此期间程序 B 尚未启动,则文件将X.pid
不会更新,因此您必须检查文件中存储的 PID 的进程是否X.pid
存在,以及该进程是否具有您期望的命令名称。
另一个策略是检查计划 B 启动时所报告的论据。您可以获得ps
或pgrep
向您提供该信息。正如评论者所说,使用的标志pgrep
是-f
.