我有几个正在运行的 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
%