Hello kcott and thank you very much for your elegant solution!

Here is what i worked out:

#!/usr/bin/perl use strict; use warnings; use Proc::ProcessTable; use Data::Dump; my $processes = new Proc::ProcessTable; my $ancestry = 3; my %tree; my %all; for ( @{ $processes->table } ) { $all{ $_->pid } = $_; $tree{ $_->pid } = [$_] if $_->cmndline =~ /^\/usr\/sbin\/mysqld/; } # dd \%all; exit; # dd \%tree; exit; for my $child (keys %tree) { print qq(child:\t$child\n); my $ppid = $all{$child}->ppid; print qq(ppid:\t$ppid\n); for (1 .. $ancestry) { push @{$tree{$child}}, $all{$ppid}; $ppid = $all{$ppid}{ppid}; last unless $ppid; print qq(ppid:\t$ppid\n); } } dd \%tree; __END__

This seems to work.

child: 9675 ppid: 9473 ppid: 1 { 9675 => [ bless({ cmajflt => 0, cminflt => 0, cmndline => "/usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mys +ql --user=mysql --log-error=/var/lib/mysql/Vit-DB-Test1.err --open-fi +les-limit=8192 --pid-file=/var/lib/mysql/Vit-DB-Test1.pid --port=3306 +", cstime => 0, ctime => 0, cutime => 0, cwd => "/var/lib/mysql", egid => 105, euid => 60, exec => "/usr/sbin/mysqld", fgid => 105, flags => 8397056, fname => "mysqld", fuid => 60, gid => 105, majflt => 1, minflt => 1078212, pctcpu => " 0.00", pctmem => 9.46, pgrp => 8146, pid => 9675, ppid => 9473, priority => 16, rss => 1593077760, sess => 8146, sgid => 105, size => 13302890496, start => 1391382138, state => "sleep", stime => 10740000, suid => 60, time => 51560000, ttydev => "", ttynum => 0, uid => 60, utime => 40820000, wchan => -1, }, "Proc::ProcessTable::Process"), bless({ cmajflt => 0, cminflt => 43760, cmndline => "/bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mys +ql --pid-file=/var/lib/mysql/Vit-DB-Test1.pid", cstime => 430000, ctime => 500000, cutime => 70000, cwd => "/", egid => 0, euid => 0, exec => "/bin/bash", fgid => 0, flags => 8388864, fname => "mysqld_safe", fuid => 0, gid => 0, majflt => 0, minflt => 2691, pctcpu => " 0.00", pctmem => 0.01, pgrp => 8146, pid => 9473, ppid => 1, priority => 25, rss => 1527808, sess => 8146, sgid => 0, size => 8228864, start => 1391382137, state => "sleep", stime => 20000, suid => 0, time => 20000, ttydev => "", ttynum => 0, uid => 0, utime => 0, wchan => -2146210175, }, "Proc::ProcessTable::Process"), bless({ cmajflt => 2747, cminflt => 657582982, cmndline => "init [3] ", cstime => 8683530000, ctime => 80500550000, cutime => 71817020000, cwd => "/", egid => 0, euid => 0, exec => "/sbin/init", fgid => 0, flags => 8397056, fname => "init", fuid => 0, gid => 0, majflt => 3, minflt => 3162, pctcpu => " 0.00", pctmem => "0.00", pgrp => 0, pid => 1, ppid => 0, priority => 16, rss => 315392, sess => 0, sgid => 0, size => 819200, start => 1378449866, state => "sleep", stime => 800000, suid => 0, time => 800000, ttydev => "", ttynum => 0, uid => 0, utime => 0, wchan => 0, }, "Proc::ProcessTable::Process"), ], }

If $ancestry == 3 and i don't say last unless $ppid, it goes back until PID 0 and sets one key in %tree to undef. I hope i didn't miss something.

Thanks again for sharing your knowledge and best regards,

Karl

«The Crux of the Biscuit is the Apostrophe»


In reply to Re^2: Better way to search in the process table? by karlgoethebier
in thread Better way to search in the process table? by karlgoethebier

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.