首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BASH -在系统内部使用awk列

BASH -在系统内部使用awk列
EN

Stack Overflow用户
提问于 2012-09-24 06:43:28
回答 2查看 155关注 0票数 2

在Bash中,我试图获得CPU占有率最高的进程。一旦我得到它,我就会使用awk来评估这个进程是必须被终止还是只是改变它。一旦我得到了这个过程,下面是我想要做的:

代码语言:javascript
复制
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。

我的问题是:

代码语言:javascript
复制
system("renice "$4"+5 -p "$1"")

它不能工作是因为"$4"+5,这是进程的实际nice加5。

如何将该值传递给renice?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-24 06:57:39

您有一些报价问题,第一个system调用应该是:

代码语言:javascript
复制
system("renice " $4 + 5 " -p " $1)

第二个是:

代码语言:javascript
复制
system("kill -9 " $1)

空格是awk中的字符串连接运算符。

关于kill -9的说明:在求助于-9之前,最好从不太严重的信号开始,因为这不会让进程在它自己之后进行任何清理,IIRC,从SIGHUP (-1)开始,然后是SIGINT (-2),然后是SIGTERM (-15),如果这些都不能使进程退出,那么使用SIGKILL (-9)。

票数 2
EN

Stack Overflow用户

发布于 2012-09-24 07:00:52

我可能会使用:

代码语言:javascript
复制
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的不同寻常之处在于使用没有显式运算符的邻接值来指示连接。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12556900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档