1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #!/usr/bin/env perl
- use strict;
- use warnings;
- use Config;
- if (@ARGV < 2) {
- die "Usage: $0 <prefix> <command...>\n";
- }
- sub gettime {
- my ($sec, $usec);
- eval {
- require Time::HiRes;
- ($sec, $usec) = Time::HiRes::gettimeofday();
- };
- unless (defined($sec) && defined($usec)) {
- my $tv_t = ($Config{'longsize'} == 8) ? 'qq' : 'll';
- my $tv = pack $tv_t, 0, 0;
- eval {
- require 'syscall.ph';
- syscall(SYS_gettimeofday(), $tv, 0);
- };
- ($sec, $usec) = unpack $tv_t, $tv;
- }
- return ($sec, $usec);
- }
- my ($prefix, @cmd) = @ARGV;
- my ($sec, $usec) = gettime();
- my $pid = fork();
- if (!defined($pid)) {
- die "$0: Failure to fork(): $!\n";
- }
- elsif ($pid == 0) {
- exec(@cmd);
- die "$0: Failure to exec(): $!\n";
- }
- else {
- $SIG{'INT'} = 'IGNORE';
- $SIG{'QUIT'} = 'IGNORE';
- if (waitpid($pid, 0) == -1) {
- die "$0: Failure to waitpid(): $!\n";
- }
- my $exitcode = $? >> 8;
- my ($sec2, $usec2) = gettime();
- my (undef, undef, $cuser, $csystem) = times();
- printf STDOUT "%s#%.2f#%.2f#%.2f\n",
- $prefix, $cuser, $csystem,
- ($sec2 - $sec) + ($usec2 - $usec) / 1000000;
- $SIG{'INT'} = 'DEFAULT';
- $SIG{'QUIT'} = 'DEFAULT';
- exit $exitcode;
- }
|