#!/usr/local/bin/perl
# edit_proc.cgi
# Display information about a process
require './proc-lib.pl';
&ui_print_header(undef, $text{'edit_title'}, "", "edit_proc");
%pinfo = &process_info($ARGV[0]);
&can_edit_process($pinfo{'user'}) || &error($text{'edit_ecannot'});
if (!%pinfo) {
print "$text{'edit_gone'}
\n";
&ui_print_footer("", $text{'index_return'});
exit;
}
print "
\n";
print " | $text{'edit_title'} |
\n";
print " \n";
print " | $text{'command'} | \n";
print " ",
&html_escape($pinfo{args})," | \n";
print " | $text{'pid'} | $pinfo{pid} | \n";
print "$text{'parent'} | \n";
if ($pinfo{ppid}) {
local %ppinfo = &process_info($pinfo{ppid});
print "",
&cut_string($ppinfo{'args'}, 30)," | ";
}
else { print "$text{'edit_none'} | "; }
print " \n";
print " | $text{'owner'} | ",
"$pinfo{'user'} | \n";
print "$text{'cpu'} | ",
"$pinfo{'cpu'} | \n";
print " | $text{'size'} | ",
"$pinfo{'size'} | \n";
print "$text{'runtime'} | ",
"$pinfo{'time'} | \n";
print " | ",&hlink("$text{'nice'}","nice")," | \n";
print " \n";
$i = 0;
foreach $k (keys %pinfo) {
if ($k =~ /^_/) {
if ($i%2 == 0) { print "\n"; }
printf "| %s | \n",
$info_arg_map{$k};
print "$pinfo{$k} | \n";
if ($i%2 == 1) { print " \n"; }
$i++;
}
}
print " |
\n";
print "
\n";
if ($access{'simple'}) {
# Just display buttons for common signals
print "\n";
}
else {
# Allow the sending of any signal
print "\n";
}
if ($has_trace_command) {
# Show button to trace syscalls
print "\n";
}
if ($has_lsof_command) {
# Show button to display currently open files
print "\n";
}
print "
\n";
@sub = grep { $_->{'ppid'} == $pinfo{pid} } &list_processes();
if (@sub) {
print "
\n";
print " | $text{'edit_sub'} |
\n";
print " \n";
@sub = sort { $a->{'pid'} <=> $b->{'pid'} } @sub;
foreach $s (@sub) {
local $p = $s->{'pid'};
print " | $p | \n";
print "",&cut_string($s->{args}, 80)," | \n";
}
print " |
\n";
}
&ui_print_footer("", $text{'index_return'});