使用ionice结合grep设置进程I/O优先级提示无对应进程如何解决
问题根源
你的命令报错核心原因是ps -ef | grep 进程名的返回结果会包含执行grep命令的临时进程,当后续ionice命令执行时,这个临时grep进程已经结束退出,因此会触发No such process的错误。
除此之外,该写法还可能模糊匹配到名称中包含关键词的其他无关进程,也可能导致报错。
修复方案
方案1:过滤掉grep自身进程
在原有命令基础上增加grep -v grep排除临时grep进程即可:
sudo ionice -c 1 -n 0 -p $(ps -ef | grep farmer | grep -v grep | awk '{print $2}') sudo ionice -c 1 -n 0 -p $(ps -ef | grep harvest | grep -v grep | awk '{print $2}')
方案2:使用pgrep工具获取PID(更简洁可靠)
pgrep是专门用于按进程名查询PID的工具,默认不会包含grep临时进程,写法更简洁:
sudo ionice -c 1 -n 0 -p $(pgrep farmer) sudo ionice -c 1 -n 0 -p $(pgrep harvest)
方案3:批量处理多同名进程
如果存在多个同名进程,可配合xargs批量设置优先级:
pgrep farmer | xargs -r sudo ionice -c 1 -n 0 -p pgrep harvest | xargs -r sudo ionice -c 1 -n 0 -p
-r为xargs的可选参数,作用是当未匹配到任何PID时不执行后续ionice命令,避免空参数报错
可选优化
如果需要精确匹配完整进程名,避免匹配到名称包含关键词的无关进程,可以给pgrep添加-x参数:
pgrep -x farmer | xargs -r sudo ionice -c 1 -n 0 -p pgrep -x harvest | xargs -r sudo ionice -c 1 -n 0 -p
内容的提问来源于stack exchange,提问作者dawnslayer
相关产品推荐
相关产品推荐

