【问题标题】:Idle time of a process in LinuxLinux中进程的空闲时间
【发布时间】:2012-02-21 14:51:51
【问题描述】:

我需要计算 Linux 中某个进程的 CPU 使用率(用户模式、系统模式、空闲时间)。 我可以使用来自/proc/PID/statutimestime 值计算用户和系统模式下的使用情况,但我没有发现任何与空闲时间相关的信息。

我知道我可以从/proc/stat 获得空闲时间,但这个值与机器有关,与特定进程无关。

是否可以在知道其PID(从/proc目录中读取数据)的情况下计算进程的空闲时间?

【问题讨论】:

  • CPU 的空闲时间是它没有执行任何(有用的)代码的时间。进程的空闲时间到底是多少?
  • 如果我错了,请纠正我,但我将进程的空闲时间理解为进程 CPU 使用率(在用户模式和系统模式下)为 0% 的时间。
  • 进程通过多个线程在多个内核上运行的时间如何计算?

标签: linux time process python-idle procfs


【解决方案1】:

为时已晚,但我猜这个命令很有用:

IFS=$'\n';for i in `ps -eo uname:20,pid,cmd | grep -v "USER\|grep\|root"`; \
do if [ $(id -g `echo $i | cut -d" " -f1`) -gt 1000 ] && \
[ $(echo $((($(date +%s) - $(date -d "$(ll -u \ 
--time-style=+"%y-%m-%d %H:%M:%S" /proc/$(echo $i | \
awk '{print $2}')/cwd | awk '{print $6" "$7}')" +%s))/3600))) >=1 ]; \
then echo $i; fi; done

在 bash 文件中使用它:

#!/bin/bash
IFS=$'\n'
for i in `ps -eo uname:20,pid,cmd | grep -v "USER\|grep\|root"`
do 
  Name="`echo $i | cut -d' ' -f1`"
  Id="$(id -g $Name)"
  Pid="`echo $i | awk '{print $2}'`"
  Time1=$(date +%s)
  Time2=$(date -d "$(/usr/bin/ls -lu --time-style=+"%y-%m-%d %H:%M:%S" \
 /proc/$Pid/cwd | awk '{print $6" "$7}')" +%s)/3600
  Time=$Time1-$Time2
  if [ $Id -gt 1000 ] && [ $Time >=1 ]
  then 
    echo $i
  fi

done

您可以根据需要更改 grep -v "grep\|root"。 这一行命令列出了所有非 root 所有者或系统用户的进程。

【讨论】:

    【解决方案2】:

    我对此了解不多,但也许以下工作:

    1) Get the process start up time. Im sure thats possible
    2) Generate time difference (dTime = CurrentTime - TimeProcessStarted)
    3) Substract the time the process is running ( dTime - (usageSystemMode + usageUserMode))
    

    希望这会有所帮助! :D

    【讨论】:

    • 我认为您的解决方案会起作用:) 可以使用 starttime 值从 /proc/PID/stat 检索进程启动时间。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多