Perl анализ ps fwaux вывод - PullRequest
0 голосов
/ 14 июня 2010

Я пытаюсь выяснить дочерние процессы данного родителя из ps fwaux (вполне может быть лучший способ сделать это).По сути, у меня запущены демоны, которые могут иметь или не запускать дочерний процесс в любой момент времени.В другом скрипте я хочу проверить, есть ли какие-либо дочерние процессы, и если да, то сделать что-то.Если нет, выдается ошибка.

ps fwaux | grep покажет мне дерево, но я не совсем уверен, что с ним делать.Любые предложения будут великолепны.

Ответы [ 2 ]

2 голосов
/ 14 июня 2010

Вы можете проанализировать результаты вызова на 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 может помочь вам в этом.

0 голосов
/ 13 октября 2010

Как обновление, это то, что я в конечном итоге делал (в 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, есть дочерние процессы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...