从这里的问题开始,OP希望重复轮询pidof
shell脚本中使用的进程的pid 。当然,这效率很低,因为必须pidof
每秒多次为该程序启动一个新进程(我不知道这是问题中CPU峰值的原因,但似乎很可能)。
通常,在Shell脚本中解决此类问题的方法是使用单个程序输出所需的数据stdout
,然后在必要时进行一些文本处理。尽管这涉及到更多的程序要同时运行,但由于没有为轮询目的而不断创建新进程,因此它可能占用较少的CPU资源。
因此,对于上述问题,一个解决方案可能是拥有一些程序,该程序在创建过程时输出过程的名称和pid。然后,您可以执行以下操作:
pids-names |
grep some_program |
cut -f 2 |
while read pid; do
process-pid "$pid"
done
这样做的问题是,它提出了一个更基本的问题,如何在创建pid和进程名称时将它们打印出来?
我发现了一个名为的程序ps-watcher
,尽管存在的问题是它只是一个perl
反复运行的脚本,ps
因此并不能真正解决问题。另一个选择是使用auditd
,如果直接通过来处理日志,则可能会起作用tail -f
。理想的解决方案比这更简单,更易于移植,但是auditd
如果它是最佳选择,我将接受一个解决方案。
dbus
)。
fork
,然后使用该exec
家族的成员来启动新程序。因此,您可能想登录而exec*
不是fork
。