Contents

Linux进程已经运行了多长时间

1. 概述

Linux 附带了一些监控工具,可以帮助我们深入了解操作系统本身。Procps包中的 ps实用程序是可以报告有关操作系统中当前进程的一些统计信息的工具之一。

在本教程中,我们将了解如何使用ps实用程序查找特定进程的正常运行时间。

2. 进程正常运行时间

为了查看特定 Linux(甚至 Mac)进程运行了多长时间,假设我们已经知道进程 ID,我们可以在 Bash shell 中输入以下命令:

>> ps -p <process_id> -o etime

让我们分解命令:

  • ps 帮助我们查看操作系统中当前进程的快照。ps代表“进程状态”
  • 使用*-p process_id选项我们可以指定进程 ID。例如,-p20 或 -p 20*表示进程 ID 为 20
  • -o format允许我们为输出指定自定义格式。**也就是说,format是一个以空格分隔或逗号分隔的列表形式的参数,它提供了一种指定单个输出列的方法。**这里我们只是想知道进程经过的时间,所以我们使用 etime作为单个输出列。顺便说一下,etime代表“经过的时间”。

例如,如果我们对进程 ID 为 1 运行上述命令:

>> ps -p 1 -o etime

我们将获得进程的运行时间:

ELAPSED
03:24:30

这个特定的进程已经运行了 3 小时 24 分 30 秒。为了以秒为单位查看经过的时间,让我们使用etimes而不是etime

>> ps -p 1 -o etimes
ELAPSED
12270

请注意,我们无法在 Mac 上使用etimes选项。

3. 经过的输出格式

默认情况下,** etime表示自进程启动以来经过的时间,采用[[DD-]hh:]mm:ss 格式。**例如,对于已运行 20 天的进程,经过的时间输出将类似于:

ELAPSED
20-11:59:45

DDhh部分是可选的,因此当运行时间少于一天或少于一小时时,它们不会出现在输出中:

ELAPSED
21:51

这个进程已经运行了 21 分 51 秒。

4. 自定义列标题

正如我们在前面的示例中看到的,-o etime选项在名为 ELAPSED 的列标题下打印经过的时间。我们可以使用*-o etime=header_name*语法重命名此标头:

>> ps -p 1 -o etime=Uptime
Uptime
03:24:30

此外,我们甚至可以完全删除标头:

>> ps -p 1 -o etime=
03:24:30

etimes也是如此:

>> ps -p 1 -o etimes=
12270

当我们要编写脚本并且我们只关心数字输出时,这会派上用场。