[ale] Finding the age of a process in seconds. How hard can it be?

Jim Kinney jim.kinney at gmail.com
Thu May 12 07:23:17 EDT 2016


Nice digging. I saw an awk process somewhere to convert dhm time to seconds
to use etime from old ps. I'll see if I can resurrect it.
On May 12, 2016 12:35 AM, "Ted W." <ted-lists at xy0.org> wrote:

> Today I found myself completely confounded by a simple question. How do
> you identify the age of a process in seconds? Let's see if we can't learn
> something.
>
> At first, this issue seemed quite simple. Surely `ps` can tell you. But
> the answer proved more complicated. It looks like `ps` can /sometimes/ tell
> you... depending on the version of procps you happen to have installed. You
> probably know that the `ps` command has the available option "etime". This
> shows you the time in format DD-HH:MM:SS. Handy, but not very easy to
> parse. Enter the newer version of `ps` which has the "etimes" option
> (notice the addition of the "s" there) which shows the process age in
> seconds. You can probably guess which version of procps is installed on
> CentOS 6 (hint: There's a reason I'm writing this email).
>
> So now that `ps` is out, let's dig a little deeper. Surely this
> information is available in /proc (newer versions of procps have to get it
> from somewhere, right?). Specifically, let's look at /proc/[pid]/stat. Lots
> of pretty strings of numbers. A quick look at `man 5 proc` shows us some
> possibilities, but these values all seem relative to other times such as
> system boot time, related to cputime used, in an alien unit of measurement
> called a "jiffy" or possibly shifted by sysconf(_SC_CLK_TCK). Maybe the man
> page can tell us if there's another file we could use in /proc/[pid].
> /proc/[pid]/exe looks interesting. According to the man page, this file is
> a symbolic link to the actual executable represented by the PID which .
> Let's see if stat can tell us when this file was last modified.
>
>     `stat -c %Y /proc/[pid]/exe`
>
> Hey, that looks like the right value of time since we started our process.
> Now we just need to subtract this from `date +%s`:
>
>     `expr $(date +%s) - $(stat -c %Y /proc/[pid]/exe)`
>
> VOILA!
>
> This is the method I've chosen to use. I'd love to know if there is a
> simpler method available on "older" Linux distributions. I'm sure this is
> not the easiest route, only the route I've settled for after several hours
> of investigation today. The closest alternative I came across was using a
> combination of `awk '{print $1}' /proc/uptime` minus `date +%s` and then
> adding back in the "starttime" value ($22) from /proc/[pid]/stat. This,
> while close, was often less accurate than subtracting the last modified
> time of /proc/[pid]/exe from the current time. It was fairly close,
> however, leading me to believe it may be due to rounding errors or errors
> in some of the unit conversions involved.
>
> Cheers,
> Ted
> _______________________________________________
> Ale mailing list
> Ale at ale.org
> http://mail.ale.org/mailman/listinfo/ale
> See JOBS, ANNOUNCE and SCHOOLS lists at
> http://mail.ale.org/mailman/listinfo
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.ale.org/pipermail/ale/attachments/20160512/9ffcfe3c/attachment.html>


More information about the Ale mailing list