Idle time of a process in Linux

后端 未结 2 1771
隐瞒了意图╮
隐瞒了意图╮ 2021-01-24 03:07

I need to calculate CPU usage (user mode, system mode, idle time) of a process in Linux. I am able to calculate usage in user and system mode using utime and

相关标签:
2条回答
  • 2021-01-24 03:36

    I don't know much about it but maybe the following works:

    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))
    

    Hope this helps! :D

    0 讨论(0)
  • 2021-01-24 03:37

    it's too late but, I guessed this command useful:

    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
    

    to use it in bash file:

    #!/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
    

    you could change grep -v "grep\|root" as you wish. this one line command list all processes which not root owner or system users.

    0 讨论(0)
提交回复
热议问题