Se você estiver no debian, poderá instalar o pacote acct
para ativar a contabilidade do processo, mas observe que nem lastcomm --debug
nem dump-acct
mostram nada como o status de saída ou o sinal que encerrou um processo.
Se a ordem para obter esses dados, você pode usar um script como este:
$ cat pacct.pl
#! /usr/bin/perl
use strict;
use Config;
printf "%-7s %6s %6s %8s %8s %s\n",
'STATUS', 'UID', 'PID', 'BTIME', 'ETIME', 'COMMAND';
my @sig = split ' ', $Config{sig_name};
$/ = ;
while(<>){
my @f = unpack 'CCSL6fS8A*', $_;
my ($flag, $version, $tty, $exitcode, $uid, $gid, $pid, $ppid,
$btime, $etime, $utime, $stime, $mem, $io, $rw,
$minflt, $majflt, $swaps, $cmd) = @f;
my $s = $exitcode & 0x7f;
my $status = $s ? "SIG$sig[$s]" : $exitcode >> 8;
printf "%-7s %6d %6d %02d:%02d:%02d %8.2f %-16s\n",
$status, $uid, $pid,
(localtime $btime)[2,1,0],
$etime / 100,
$cmd;
}
$ perl pacct.pl /var/log/account/pacct
Isso pressupõe a versão 3 do formato de arquivo de log - consulte acct.h
.
Observe, no entanto, que isso não é útil, porque apenas o nome do processo / encadeamento está incluído no arquivo de log (isto é, o nome básico do executável, truncado para 15 bytes e que pode ser facilmente falsificado com prctl(PR_SET_NAME)
) , não o caminho do executável ou os argumentos com os quais foi invocado.
Se você deseja estender esse script para exibir também os campos stime
, utime
, etc, isso pode ser útil:
# translate comp_t to float
# utime, stime, mem, minflt, majflt are in the comp_t format
# io, rw, swaps are never set; they're purely decorative
sub comp2f {
my $m = $_[0] & 0x1fff; my $e = $_[0] >> 13; $m * 8 ** $e;
}