如何使用 pgrep (或其他工具)查找同名的多个进程之一?

如何使用 pgrep (或其他工具)查找同名的多个进程之一?

我有几个正在运行的 bash 脚本。它们之间唯一不同的是 pid。我想写一个像这样的脚本只监视一个特定的 bash 进程并排除任何子进程。我见过问题,但在这种情况下,进程名称不同,您只需编写精确的正则表达式即可。

目前,如果我这样做

% pgrep bash 
40583
47095
48133
49244

如果我这样做

% pgrep -P 47095
47099
50151

我想做类似的事情

% pgrep bash -P 47095

然后得到结果

47095 # (i.e. no daughter processes)

如果 47095 不再存在,则返回空值。如何才能实现这一目标?答案不需要基于 pgrep,重要的是如果进程正在运行它只返回一行,如果没有这样的进程则什么也不返回。

答案1

我想你可能想要的是 PID 文件处理pgrep,而不是使用-P

-F, --pidfile file
   Read PIDs from file.  This option is more useful for pkill or pidwait than pgrep.

行动中:

% sleep 100 &
[1] 26819
% echo 26819 > pid
% pgrep -F pid sleep
26819
% pgrep -F pid sleep -l
26819 sleep
% pgrep -F pid awake -l
%

相关内容