0

我正在编写一个 bash 脚本,需要从 apache 中检索 C 值(处理器利用率)为零的特定用户的进程列表。然后我想杀死那些进程。我的脚本目前看起来像这样:

process_user=myuser
max_instances=10
poll_interval=60

while true; do 
  count=$(ps -u $process_user | wc -l)
  echo "count: $count"
  if [[ $count > $max_instances ]]; then
    killall "$process_user"
    echo "Found $count $process_user processes. Killed."
  fi
  sleep "$poll_interval"
done

以上方法可以很好地识别特定用户的进程并杀死它们。但是我不知道如何进一步限制处理器利用率是否为0。

4

1 回答 1

0

这是一个解决方案:

process_user=myuser
max_instances=10
pool_interval=60

while sleep $pool_interval;do 
  ps -o pid,c -u $process_user --no-headers \
  | awk '                                   \
    $2 > 0{top=top " " $1}                  \
    {count++}                               \
    END {                                   \
      if(count > '$max_instances'  && top){ \
        system("kill " top);                \
        print "killed: " top                \
      }                                     \
    }'
done

一些解释:

  1. ps -o pid,c -u $user --no-headers 显示pid和拥有的进程的处理器利用率 ( c$user ) 。跳过标题 ( PID C)
  2. $2 > 0- 该{}块将仅对第二个字段(处理器利用率)大于 0 的行执行。
  3. { top = top ' ' $1 }将pid(第一个字段 - )附加到以空格分隔的$1变量top
  4. {count++}计算所有行=用户进程
  5. END {这个块将在所有行都被处理之后执行
于 2013-04-26T19:50:38.043 回答