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