我试图从ps fwaux中找出给定父母的子进程(可能有更好的方法来做到这一点)。基本上,我有运行的守护进程可能会或可能不会在任何给定时间运行子进程。在另一个脚本中,我想检查是否有任何子进程,如果有的话。如果没有,请输出错误。
ps fwaux | grep会告诉我这棵树,但我不确定该如何处理它。任何建议都会很棒。
答案 0 :(得分:2)
您可以解析对Proc::ProcessTable的调用结果:
use Proc::ProcessTable;
my $processes = Proc::ProcessTable->new(enable_ttys => 0);
my @children = grep { $_->cmndline =~ /some_pattern_matching_your_children/ } @{$processes->table};
# or:
my @children = grep { $_->ppid == $parent_pid } @{$processes->table};
但回到跟踪孩子的更大问题:孩子们应该使用pid文件跟踪自己,而不是点击进程表。 File::Pid可以帮助您。
答案 1 :(得分:0)
作为更新,这就是我最终要做的事情(在bash ......中)
while :
do
# find parent ids
PIDS="`ps -eao bsdtime,pid,command | egrep -v egrep | egrep 'processname' | awk '{print $2}'`"
count=0
# loop through ppids and look for children
for j in ${PIDS}
do
#echo "Parent process = $j"
CPID="`ps -ef | awk '$3 == J {print $2}' J=$j`"
for i in ${CPID}
do
#echo "Child process = $i"
let count++
done
done
然后,如果计数> 0,有子进程。