#!/usr/local/bin/perl # Display syscalls made by this process in real time require './proc-lib.pl'; &ReadParse(); if ($config{'trace_java'}) { &ui_print_header(undef, $text{'trace_title'}, "", "trace"); } else { &ui_print_unbuffered_header(undef, $text{'trace_title'}, "", "trace"); } %pinfo = &process_info($in{'pid'}); &can_edit_process($pinfo{'user'}) || &error($text{'edit_ecannot'}); if (!%pinfo) { print "$text{'edit_gone'}
\n";
&ui_print_footer("", $text{'index_return'});
exit;
}
$syscalls = &ui_form_start("trace.cgi", "post")."\n".
&ui_hidden("pid", $in{'pid'})."\n".
"$text{'trace_syscalls'}\n".
&ui_radio("all", defined($in{'all'}) ? $in{'all'} : 1,
[ [ 1, $text{'trace_all'} ],
[ 0, $text{'trace_sel'} ] ])."\n".
&ui_textbox("syscalls", $in{'syscalls'}, 40)."\n".
&ui_submit($text{'trace_change'})."\n".
&ui_form_end()."\n";
if ($config{'trace_java'}) {
# Output Java applet to show trace
print "",&text('trace_doing', "$pinfo{'args'}"),"
\n";
print $syscalls;
print "\n";
}
else {
# Just display here as text
@syscalls = $in{'all'} ? ( ) : split(/\s+/, $in{'syscalls'});
$trace = &open_process_trace($in{'pid'},
\@syscalls);
$fmt = "%-8.8s %-11.11s %-80.80s %-10.10s";
print "",&text('trace_start', "$pinfo{'args'}"),"
\n";
print $syscalls;
print "
"; printf "$fmt\n", "Time", "System Call", "Parameters", "Return"; printf "$fmt\n", ("-"x8), ("-"x11), ("-"x80), ("-"x10); while($action = &read_process_trace($trace)) { local $tm = strftime("%H:%M:%S", localtime($action->{'time'})); printf "$fmt\n", $tm, $action->{'call'}, join(", ", @{$action->{'args'}}), $action->{'rv'}; } print ""; &close_process_trace($trace); if (!kill(0, $in{'pid'})) { print "$text{'trace_done'}