代码之家  ›  专栏  ›  技术社区  ›  ftdysa

Perl解析ps fwaux输出

  •  0
  • ftdysa  · 技术社区  · 14 年前

    我试图从ps-fwaux中找出给定父进程的子进程(很可能有更好的方法)。基本上,我运行的守护进程在任何给定的时间都可能有子进程在运行,也可能没有。在另一个脚本中,我想检查是否有子进程,如果有,做些什么。如果不是,则出错。

    格雷普会给我看那棵树,但我不知道该怎么处理。有什么建议都可以。

    2 回复  |  直到 14 年前
        1
  •  2
  •   Ether    14 年前

    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

        2
  •  0
  •   ftdysa    14 年前

    作为更新,这就是我最终要做的(在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
    

    如果count>0,存在子进程。