Current File : //usr/share/webmin/proc/index_tree.cgi |
#!/usr/bin/perl
# index.cgi
# Display a list of all existing processes
require './proc-lib.pl';
&ui_print_header(undef, $text{'index_title'}, "", "tree", !$no_module_config, 1);
&index_links("tree");
print &ui_columns_start([ $text{'pid'},
$text{'owner'},
$info_arg_map{'_stime'} ? ( $text{'stime'} ) : ( ),
$text{'command'} ], 100);
@procs = sort { $a->{'pid'} <=> $b->{'pid'} } &list_processes();
foreach $pr (@procs) {
$p = $pr->{'pid'}; $pp = $pr->{'ppid'};
$procmap{$p} = $pr;
$argmap{$p} = $pr->{'args'};
$usermap{$p} = $pr->{'user'};
$stimemap{$p} = &format_stime($pr);
push(@{$children{$pp}}, $p);
$inlist{$pr->{'pid'}}++;
}
foreach $pr (@procs) {
push(@roots, $pr->{'pid'}) if (!$inlist{$pr->{'ppid'}} ||
$pr->{'pid'} == $pr->{'ppid'} ||
$pr->{'pid'} == 0);
}
foreach $r (&unique(@roots)) {
&walk_procs("", $r);
}
print &ui_columns_end();
&ui_print_footer("/", $text{'index'});
# walk_procs(indent, pid)
sub walk_procs
{
next if ($done_proc{$_[1]}++);
local(@ch, $_, $args);
if (&can_view_process($procmap{$_[1]})) {
local @cols;
if (&can_edit_process($usermap{$_[1]})) {
push(@cols, $_[0].&ui_link("edit_proc.cgi?".$_[1], $_[1]) );
}
else {
push(@cols, "$_[0]$_[1]");
}
push(@cols, $usermap{$_[1]});
if ($info_arg_map{'_stime'}) {
push(@cols, $stimemap{$_[1]});
}
$args = &cut_string($argmap{$_[1]});
push(@cols, &html_escape($args));
print &ui_columns_row(\@cols);
}
foreach (@{$children{$_[1]}}) {
&walk_procs("$_[0] ", $_);
}
}