Linux 基于nice值(bash)终止进程

Linux 基于nice值(bash)终止进程,linux,bash,shell,Linux,Bash,Shell,我目前正在做一个练习,要求我写一个脚本,根据它的好值终止“睡眠”过程。因此,在一个终端中,当我在另一个终端中运行脚本时,100的sleep命令(默认niceness值为0)将立即终止。然而,我在为它编写脚本时遇到了麻烦。以下是我到目前为止的情况: #!/usr/local/bin/bash nice="$(ps eo pid,user,nice,command | grep sleep)" if nice <= 4 then kill -9 sleep fi #/usr/loc

我目前正在做一个练习,要求我写一个脚本,根据它的好值终止“睡眠”过程。因此,在一个终端中,当我在另一个终端中运行脚本时,100的sleep命令(默认niceness值为0)将立即终止。然而,我在为它编写脚本时遇到了麻烦。以下是我到目前为止的情况:

#!/usr/local/bin/bash
nice="$(ps eo pid,user,nice,command | grep sleep)"

if nice <= 4
  then
  kill -9 sleep
fi
#/usr/local/bin/bash
nice=“$(ps eo pid,用户,nice,命令| grep sleep)”

如果nice您可以使用
awk
匹配一列并返回另一列:

sleep=$(ps eo pid,nice,command | awk '$3 == "sleep" && $2 <= 4 {print $1}')
if [ "$sleep" ]
then kill $sleep
fi

sleep=$(ps-eo-pid,nice,command | awk'$3==“sleep”和&$2下面的命令使用niceness杀死所有睡眠进程即使没有
awk
,您也可以简单地执行此操作:

read pid nice < <(ps -C sleep ho pid,nice)
if (( $nice <= 4 ))
    then kill $pid
fi

我更喜欢你的解决方案而不是我的,也许我会替换
谢谢!我会编辑它。但是,你的观点是可以有更多
睡眠
实例是有效的,我的解决方案没有反映出来。我留下这个,因为我们的解决方案可以轻松组合。我已经添加了@j.a.删除的解决方案中的
while
循环。谢谢你的支持回答并解释所有内容。但有一个问题:我如何让这个脚本永远运行,就像在中一样,它会继续杀死那些值小于4的sleep命令,直到我完成它?一个简单的方法是用另一个(无限)代码包装代码while循环如下:
while true;do;sleep 1;done
。这大约每秒执行一次杀戮。
read pid nice < <(ps -C sleep ho pid,nice)
if (( $nice <= 4 ))
    then kill $pid
fi
while read pid nice; do
    if (($nice <= 4))
        then kill $pid;
    fi
done  < <(ps -C sleep ho pid,nice)