2

Bash では、ほとんどの %CPU でプロセスを取得しようとしています。取得したら、awkを使用して、プロセスを強制終了する必要があるか、単に変更する必要があるかを評価しています。プロセスを取得したら、これが私がやろうとしていることです:

awk -v awkmax="$CPU_MAX" '
{ 
  if( $3 > awkmax && $4 < 15 ) { 
    system("renice "$4"+5 -p "$1"")
  } 
  else if ( $3 > awkmax && $4 == 15 ) { 
    system("kill -9 "$1"")
    print "The process $1 has been killed.\n" 
  } 
}'

pcpu$3$4ナイス値、$1は pid です。

私の問題はここにあります:

system("renice "$4"+5 -p "$1"")

が原因で機能しません"$4"+5。これは、プロセスの実際のナイスに 5 を加えたものです。

その値をレニスに渡すにはどうすればよいですか?

4

2 に答える 2

2

引用の問題がいくつかあります。最初のsystem呼び出しは次のようにする必要があります。

system("renice " $4 + 5 " -p " $1)

そして2番目:

system("kill -9 " $1)

スペースは の文字列連結演算子ですawk

に関する注意kill -9: に頼る前に、より深刻度の低いシグナルから開始することを-9お勧めします。これは、IIRC が SIGHUP ( -1) で始まり、次に SIGINT ( -2)、次に SIGTERM ( -15)、これらのいずれもプロセスを終了させない場合は、SIGKILL ( -9) を使用します。

于 2012-09-23T22:57:38.930 に答える
2

私はおそらく使用します:

awk -v awkmax="$CPU_MAX" '
{ 
  if ($3 > awkmax && $4 < 15) {
    renice = $4 + 5 
    system("renice " renice " -p "$1"")
  } 
  else if ($3 > awkmax && $4 == 15) { 
    system("kill -9 " $1)
    print "The process $1 has been killed.\n" 
  } 
}'

awk連結を示すために明示的な演算子を使用せずに隣接する値を使用するのは珍しいことです。

于 2012-09-23T23:00:52.157 に答える