Как получить время безотказной работы в разных ОС?

В Linux я могу получить время работы процесса в секундах:

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

Но как я могу получить его под другой ОС? например: SunOS, HP-UX, AIX?

    В любой POSIX-совместимой системе вы можете использовать столбец etime ps .

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

    Выходной сигнал разбивается на дни, часы, минуты и секунды с синтаксисом [[dd-]hh:]mm:ss . Вы можете вернуть его на несколько секунд с простой арифметикой:

     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#*:})) 
     echo $(( $(date +'%s') - $(stat -c '%Y' /proc/$PID) )) 

    Это должно работать в любой системе с файловой системой /proc . К сожалению, у меня нет средств для тестирования.

    Я не знаю, есть ли одна команда для всех систем, но вы можете использовать Unix Rosetta Stone для перевода команд в каждую систему.

    Это будет работать:

     ps -eo etime,cmd | grep process_name 

    Обнаружен тот, который работает через Linux (возможно, все версии) и Solaris (по крайней мере, 5.9) – нет доступа к другим ОС для тестирования и слишком ленив для проверки документов 🙂

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

    это время, когда система загружалась в формате yyyy / mm / dd HH: MM: SS, поэтому преобразование в эпох-секунды:

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

    и время, которое оно было в секундах, очевидно, является просто текущим временным временем минус, т.е. $(( $(date +%s) - $bootepoc ))

    Если вы хотите, чтобы в качестве более форматированной даты, возможно, было бы легче перейти с другим ответом, хотя другие языки сценариев могут получить вас там (возможно, возможны и другие способы).

    (вы не сказали, как вы этого хотели, но дали другой пример).