#!/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__ #### child: 9675 ppid: 9473 ppid: 1 { 9675 => [ bless({ cmajflt => 0, cminflt => 0, cmndline => "/usr/sbin/mysqld --basedir=/ --datadir=/var/lib/mysql --user=mysql --log-error=/var/lib/mysql/Vit-DB-Test1.err --open-files-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/mysql --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"), ], }