2012-09-23 11 views
2

在Bash中,我試圖用大多數CPU獲得進程。一旦我得到它,我使用awk來評估過程是否必須被殺死或者只是改變它的好。一旦我得到的過程,這裏就是我想要做的事:BASH - 在系統內部使用一列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" 
    } 
}' 

其中$3是PCPU,$4是很好的價值,$1是PID。

我的問題是在這裏:

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

它不會因爲"$4"+5的工作,這是過程的實際不錯的加5

我怎麼能傳遞價值,使用renice?

回答

2

你有一些報價的問題,首先system調用應該是:

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

而第二個:

system("kill -9 " $1) 

空間是awk字符串連接運算符。

kill -9的說明:這是更好訴諸之前開始不太嚴重的信號,因爲這並不讓程序做任何後清理自我,IIRC,開始SIGHUP(-1),然後SIGINT( -2),然後是SIGTERM(-15),如果這些都不會使進程退出,那麼使用SIGKILL()。

+0

謝謝!現在它可以工作 –

+0

'SIGTERM'是kill的默認值,通常是你想要開始的。 – jordanm

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在使用相鄰值沒有明確的操作指示串聯異常。