0

私は bash スクリプトを作成しており、C 値 (プロセッサ使用率) がゼロの特定のユーザーのプロセス リストを apache から取得する必要があります。次に、それらのプロセスだけを強制終了します。私のスクリプトは現在次のようになっています:

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- この{}ブロックは、2 番目のフィールド (プロセッサー使用率) が 0 よりも大きい行に対してのみ実行されます。
  3. { top = top ' ' $1 }pid (最初のフィールド - ) をスペースで区切っ$1て変数に追加しますtop
  4. {count++}すべての行を数える = ユーザープロセス
  5. END {このブロックは、すべての行が処理された後に実行されます
于 2013-04-26T19:50:38.043 に答える