如何获取不同操作系统下进程的正常运行时间?

如何获取不同操作系统下进程的正常运行时间?

在 Linux 下,我可以使用以下命令在几秒钟内获取进程的正常运行时间:

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

但如何在不同的操作系统下获取它呢?例如:SunOS、HP-UX、AIX?

答案1

在任何兼容 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#*:}))

答案2

echo $(( $(date +'%s') - $(stat -c '%Y' /proc/$PID) ))

这应该适用于任何具有/proc文件系统的系统。不幸的是我没有办法测试它。

答案3

我不知道是否有一个命令适用于所有系统,但您可以使用Unix 罗塞塔石碑将命令翻译到每个系统。

答案4

发现了一个可以跨 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 ))

如果您希望将其作为更格式化的日期,那么使用另一个答案可能会更容易,尽管其他脚本语言可以帮助您实现目标(也可能有其他方式)。

(你没有说你想要什么,但给出了一个不同的例子)。

相关内容