bug-bash
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [FR] save command times and exit status in history automatically


From: L A Walsh
Subject: Re: [FR] save command times and exit status in history automatically
Date: Sun, 10 Nov 2019 03:38:59 -0800
User-agent: Thunderbird

On 2019/11/07 12:18, Daniel Colascione wrote:
>>> statuses? This information is practically free to collect.
>>>       
>> Because by the time you gather this information, the command has already
>> been saved completely.
>>
>> There have been various proposals to extend the timestamp with additional
>> information, but it's all data you can gather when the timestamp is saved
>> before the command is executed.
>>     
> Why not also, optionally, save command execution times and exit
----
This sounds like you want accounting info (?).
Example: I executed a perl command (using 'tperl') that exited with
a status of 12.

The output I got (some spaces trimmed) was:

perl |v3| 1.00| 0.00| 1.00| 5013| 201|
11536.00| 0.00| 98283| 98014|12|pts/2 |Sun Nov 10 03:20:17 2019

That could be merged with history output (my HIST format is
HISTTIMEFORMAT='%m%d@%H%M%S: ')


55325  1110@032011: tperl
exit 12;'
55326  1110@032020: dump-acct -r  /var/account/pacct |more
55327  1110@032419: man 5 acct
55328  1110@033045: history |tail
--------------------

Documented in manpage 'acct(5)':
Fields:

#define ACCT_COMM 16

typedef u_int16_t comp_t;

struct acct {
char ac_flag;           /* Accounting flags */
u_int16_t ac_uid;       /* Accounting user ID */
u_int16_t ac_gid;       /* Accounting group ID */
u_int16_t ac_tty;       /* Controlling terminal */
u_int32_t ac_btime;     /* Process creation time
(seconds since the Epoch) */
comp_t    ac_utime;     /* User CPU time */
comp_t    ac_stime;     /* System CPU time */
comp_t    ac_etime;     /* Elapsed time */
comp_t    ac_mem;       /* Average memory usage (kB) */
comp_t    ac_io;        /* Characters transferred (unused) */
comp_t    ac_rw;        /* Blocks read or written (unused) */
comp_t    ac_minflt;    /* Minor page faults */
comp_t    ac_majflt;    /* Major page faults */
comp_t    ac_swaps;     /* Number of swaps (unused) */
u_int32_t ac_exitcode;  /* Process termination status
(see wait(2)) */
char      ac_comm[ACCT_COMM+1];
/* Command name (basename of last
executed command; null-terminated) */
char      ac_pad[X];    /* padding bytes */
};

enum {          /* Bits that may be set in ac_flag field */
AFORK = 0x01,   /* Has executed fork, but no exec */
ASU   = 0x02,   /* Used superuser privileges */
ACORE = 0x08,   /* Dumped core */
AXSIG = 0x10    /* Killed by a signal */
};

The  comp_t  data type is a floating-point value consisting of a
3-bit, base-8 exponent, and a 13-bit mantissa.  A value, c, of
this type can be converted to a (long) integer as follows:

   v = (c & 0x1fff) << (((c >> 13) & 0x7) * 3);

 The ac_utime, ac_stime, and ac_etime fields measure time in
"clock ticks"; divide these values by sysconf(_SC_CLK_TCK) to
convert them  to  seconds.






reply via email to

[Prev in Thread] Current Thread [Next in Thread]