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系统的管理和维护会更加得心应手。