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" 
  } 
}'

哪里$3是 pcpu,$4是不错的值,$1是 pid。

我的问题在这里:

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

它不起作用,因为"$4"+5,这是该过程的实际好处加上 5。

我如何将该值传递给 renice?

4

2 回答 2

2

你有一些报价问题,第一个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-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 回答