在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"
}
}'其中$3是pcpu,$4是nice值,$1是pid。
我的问题是:
system("renice "$4"+5 -p "$1"")它不能工作是因为"$4"+5,这是进程的实际nice加5。
如何将该值传递给renice?
发布于 2012-09-24 06:57:39
您有一些报价问题,第一个system调用应该是:
system("renice " $4 + 5 " -p " $1)第二个是:
system("kill -9 " $1)空格是awk中的字符串连接运算符。
关于kill -9的说明:在求助于-9之前,最好从不太严重的信号开始,因为这不会让进程在它自己之后进行任何清理,IIRC,从SIGHUP (-1)开始,然后是SIGINT (-2),然后是SIGTERM (-15),如果这些都不能使进程退出,那么使用SIGKILL (-9)。
发布于 2012-09-24 07:00:52
我可能会使用:
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的不同寻常之处在于使用没有显式运算符的邻接值来指示连接。
https://stackoverflow.com/questions/12556900
复制相似问题