如何检查进程完成后运行了多长时间?

如何检查进程完成后运行了多长时间?

目前我正在使用以下命令来检查进程实际运行的时间:

ps -eo uid,pid,etime | egrep '^ *MY_ID' | egrep 'PID_OF_PROCESS'

输出如下:

MY_ID PID_OF_PROCESS       00:16

然而,在该过程结束后,我想知道它实际运行了多长时间,但我似乎找不到该信息。

答案1

我认为在该过程完成后不可能获得此类信息。

如果您事先知道需要该信息,则可以运行以下命令

time <command>

例如

~> time sleep 1

real        0m1.003s
user        0m0.002s
sys         0m0.001s

答案2

检查你的unix版本是否支持流程会计。例如,在 Ubuntu(以及大多数其他 Linux 发行版)上,这是由acct包裹 安装帐户http://bit.ly/software-small。如果会计子系统已启动并运行,则lastcomm显示有关已完成进程的信息,包括它们使用了多少处理器时间(不记录挂钟时间)。

如果您需要特定程序的计时,通过调用它time

如果您需要更精确的信息,请使用更高级的审核包,例如审计子系统在Linux下。

答案3

在我看到这个问题及其答案之前,我制作了一个小 bash 脚本。如果您没有 root 权限并且未安装 acct 或者您不直接调用命令(在我的例子中:我使用 gui 来设置后台进程),这仍然很有用。您需要在运行之前获取 PID(有人有兴趣将其添加到脚本中吗?:)

#!/bin/bash

echo "Checking run time"
read -p "What is the pid? " PID

while true; do
    # sleep needed! used to reduce cpu usage and mass of output
    sleep 5
    ps -eo uid,pid,etime | egrep '$PID' | egrep '$UID'
done

这样,找到PROCESS_NAME的PID

ps aux | awk 'NR == 1 || /PROCESS_NAME/'

实际上,我尝试将 USER-ID 和 PID 结合起来使脚本变得明确,但这并不那么容易...... ps -eo uid,pid,etime | egrep '$UID[[:space:]]$PID'似乎并不总是有效......

相关内容