「探究Linux下ps命令用来查看时间的方法」

1. 了解ps命令

ps命令是Linux操作系统下的一个查看进程信息的命令,可以输出当前系统中正在运行的进程信息。使用此命令可以方便地查看进程占用的资源等信息。

2. 查看进程运行时间

我们可以使用ps命令来查看进程的运行时间,包括进程运行的总时间和CPU时间。

2.1 进程运行总时间

在ps命令中,我们可以使用“etimes”选项来查看进程运行的总时间,以秒为单位。

ps -eo pid,comm,etime | grep 进程名

上述命令中,“-e”选项表示显示所有进程,“-o”选项表示自定义输出格式。其中,“pid”表示进程ID,“comm”表示进程命令名,“etime”表示进程运行总时间。通过grep命令过滤出特定进程名的结果。

比如,我们可以查看当前系统中sshd进程运行的总时间:

ps -eo pid,comm,etime | grep sshd

示例输出结果如下:

    625 sshd         21-06:00:53

754 sshd 21-06:00:53

789 sshd 21-06:00:53

1318 sshd 21-00:29:36

1349 sshd 22-11:45:00

上述输出结果中,“21-06:00:53”表示进程的运行时间,其中“21”表示天数,“06”表示小时数,“00”表示分钟数,“53”表示秒数。

2.2 进程CPU时间

我们可以使用“cputime”选项来查看进程运行的CPU时间,以秒为单位。

ps -eo pid,comm,cputime | grep 进程名

上述命令中,“cputime”表示进程运行的CPU时间。其他的参数含义可以参考前面的说明。同样,通过grep命令过滤出特定进程名的结果。

比如,我们可以查看当前系统中sshd进程运行的CPU时间:

ps -eo pid,comm,cputime | grep sshd

示例输出结果如下:

    625 sshd         38304:28

754 sshd 38304:27

789 sshd 38304:28

1318 sshd 34500:05

1349 sshd 40278:51

上述输出结果中,“38304:28”表示CPU时间,其中“38304”表示秒数,“28”表示毫秒数。

3. 换算成可读性更强的格式

通过上面的命令,我们可以得到进程的运行时间和CPU时间,但是输出格式不太友好。我们可以将以上结果转换成更直观的时间格式

3.1 进程运行总时间换算

我们可以编写脚本来把进程运行总时间转换成更易读的格式。以下是一个示例的Python脚本:

#!/usr/bin/env python

import sys

import re

def convert_time(time_str):

match = re.match(r"((?P<days>\d+)-)?((?P<hours>\d+):)?((?P<minutes>\d+):)?(?P<seconds>\d+)", time_str)

if match is None:

return time_str

time_dict = match.groupdict()

for key in ['days', 'hours', 'minutes']:

if time_dict[key]:

time_dict[key] = int(time_dict[key])

else:

time_dict[key] = 0

seconds = int(time_dict['seconds'])

minutes = int(time_dict['minutes'])

hours = int(time_dict['hours'])

days = int(time_dict['days'])

minutes += seconds // 60

seconds %= 60

hours += minutes // 60

minutes %= 60

days += hours // 24

hours %= 24

result = ""

if days != 0:

result += "%d days " % days

if hours != 0:

result += "%02d:" % hours

result += "%02d:%02d" % (minutes, seconds)

return result

if __name__ == '__main__':

for line in sys.stdin.readlines():

line = line.strip()

fields = line.split()

pid, comm = fields[0], fields[1]

time_str = fields[2]

time_str = convert_time(time_str)

print("{}\t{}\t{}".format(pid, comm, time_str))

使用该脚本可以将ps命令输出结果的进程运行总时间转换为更友好的格式:

ps -eo pid,comm,etime | grep sshd | python convert_time.py

示例输出结果如下:

625    sshd    20 days 06:41

754 sshd 20 days 06:41

789 sshd 20 days 06:41

1318 sshd 21:19

1349 sshd 23:28

3.2 进程CPU时间换算

同样,我们也可以编写脚本来将进程CPU时间转换成更易读的格式。以下是一个示例的Python脚本:

#!/usr/bin/env python

import sys

def convert_cputime(cputime_str):

seconds = float(cputime_str)

minutes, seconds = divmod(seconds, 60)

hours, minutes = divmod(minutes, 60)

days, hours = divmod(hours, 24)

result = ""

if days != 0:

result += "%d days " % days

if hours != 0:

result += "%02d:" % hours

result += "%02d:%02d" % (minutes, seconds)

return result

if __name__ == '__main__':

for line in sys.stdin.readlines():

line = line.strip()

fields = line.split()

pid, comm = fields[0], fields[1]

cputime_str = fields[2]

cputime_str = convert_cputime(cputime_str)

print("{}\t{}\t{}".format(pid, comm, cputime_str))

使用该脚本可以将ps命令的输出结果中的CPU时间转换为更友好的格式:

ps -eo pid,comm,cputime | grep sshd | python convert_cputime.py

示例输出结果如下:

625    sshd    423:44

754 sshd 423:42

789 sshd 423:44

1318 sshd 345:00

1349 sshd 448:18

4.总结

通过以上操作,我们可以利用ps命令查看进程的运行时间和CPU时间,并转换成更易读的格式。这些信息对于优化系统性能和分析进程运行时间非常有用。相信有了这些知识,您对Linux系统的管理和维护会更加得心应手。

操作系统标签