Perl解析ps fwaux输出

时间:2010-06-14 17:31:04

标签: perl

我试图从ps fwaux中找出给定父母的子进程(可能有更好的方法来做到这一点)。基本上,我有运行的守护进程可能会或可能不会在任何给定时间运行子进程。在另一个脚本中,我想检查是否有任何子进程,如果有的话。如果没有,请输出错误。

ps fwaux | grep会告诉我这棵树,但我不确定该如何处理它。任何建议都会很棒。

2 个答案:

答案 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,有子进程。