如何检查流程完成后需要运行多长时间?


14

目前,我正在使用以下方法检查进程实际运行了多长时间:

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

并输出以下内容:

MY_ID PID_OF_PROCESS       00:16

但是,该过程结束后,我想找出实际运行了多长时间,但似乎找不到该信息。

Answers:


15

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

如果您事先知道需要这些信息,则可以按以下方式运行命令:

time <command>

例如

~> time sleep 1

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

7

检查您的unix变体是否支持流程记帐。例如,在Ubuntu(和大多数其他Linux发行版)上,这是由Install acct http://bit.ly/software-small acct软件包 提供的。如果计费子系统已启动并正在运行,则显示有关已完成流程的信息,包括它们使用了多少处理器时间(挂钟时间未记录)。lastcomm

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

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


这个答案已经失去了形象。
mattdm

@mattdm哦,这Ask Ubuntu上用于链接到的标准链接apt.ubuntu.com,然后该图像从imgur中删除。我肯定在SE中已经使用了数百次,而且我不喜欢编辑所有内容。我仍然支持SE进行自动替换,他们不会这样做,因为当所有Java文档都移开时他们甚至都没有这样做。
吉尔(Gilles)'所以

1

在我看到这个问题及其答案之前,我做了一个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'似乎并不总是能正常工作...


正是我所需要的!我发现在Centos 6.8上,我需要省略“ $ PID”周围的引号并跳过,egrep '$UID'因为我是唯一的用户,所以:ps -eo uid,pid,etime | egrep $PID
Chris Adams
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.