Under Linux I can get a process's uptime in seconds with:

echo $(($(cut -d "." -f1 /proc/uptime) - $(($(cut -d " " -f22 /proc/$PID/stat)/100))))

But how can I get it under different OS? ex.: SunOS, HP-UX, AIX?


On any POSIX-compliant system, you can use the etime column of ps.

LC_ALL=POSIX ps -o etime= -p $PID

The output is broken down into days, hours, minutes and seconds with the syntax [[dd-]hh:]mm:ss. You can work it back into a number of seconds with simple arithmetic:

t=$(LC_ALL=POSIX ps -o etime= -p $PID)
d=0 h=0
case $t in *-*) d=$((0 + ${t%%-*})); t=${t#*-};; esac
case $t in *:*:*) h=$((0 + ${t%%:*})); t=${t#*:};; esac
s=$((10#$d*86400 + 10#$h*3600 + 10#${t%%:*}*60 + 10#${t#*:}))
|improve this answer|||||
echo $(( $(date +'%s') - $(stat -c '%Y' /proc/$PID) ))

This should work in any system with a /proc filesystem. Unfortunately I don't have the means to test it.

|improve this answer|||||

I don't know if there is one command for all systems, but you can use the Unix Rosetta Stone to translate the commands to each system.

|improve this answer|||||
  • This amounts to a link-only answer; it could be expanded to include the actual commands to determine process uptimes in the various OS's. – Jeff Schaller May 23 '17 at 18:47

This will work:

ps -eo etime,cmd | grep process_name
|improve this answer|||||

Discovered one that works across Linux (probably all versions) and Solaris (at least, 5.9) - no access to other OS's to test it and too lazy to check docs :)

boottime=$(who -b | awk '/ /{print $3 " " $4}')")

is the time the system was booted in yyyy/mm/dd HH:MM:SS format, so converting to epoch-seconds is:

bootepoc=date -d "$boottime" +%s

and time its been up in seconds is obviously just current epoc-time minus that ie. $(( $(date +%s) - $bootepoc ))

If you want that as a more formatted date, might be easier going with another answer although other scripting languages can get you there (probably possible other ways too).

(you didnt say how you wanted it but gave a different example).

|improve this answer|||||

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.