如何按名称更改进程的好坏

Seb*_*ski 7 bash cron process nice

Java 进程正在杀死我的计算机(Intel i3,8GB RAM)。它接管了整个 CPU,系统开始挂起。我试图改变nicenessjava 进程,但我必须一直控制它,这并不总是可能的。因此,一开始我尝试构建一个命令来niceness按名称更改进程。结束了这样的事情:

ps ax -o pid,comm | grep java | awk '{print $1}' | tr "\n" " " | renice -n 5 -p
Run Code Online (Sandbox Code Playgroud)

但它看起来不起作用。我不知道下一步要去哪里。Bash 脚本可能吗?每次都运行它cron还是运行它?或者,还有更好的方法?watchx

kos*_*kos 10

如果您只有一个java实例在运行,只需:

renice -n 5 -p $(pgrep ^java$)
Run Code Online (Sandbox Code Playgroud)
  • $(pgrep ^java$):命令替换;bash将其替换为pgrep ^java$; pgrep ^java$返回名称与正则表达式匹配的进程的 PID 列表,该列表^java$与名称完全匹配的所有进程java

如果您有多个java实例正在运行:

for p in $(pgrep ^java$); do renice -n 5 -p $p; done
Run Code Online (Sandbox Code Playgroud)
  • for p in $(pgrep ^java$); do renice -n 5 -p $p; done: 几乎和上面一样;$(pgrep ^java$)是命令替换;bash将其替换为pgrep ^java$; pgrep ^java$返回名称与正则表达式匹配的进程的 PID 列表,该列表^java$匹配名称恰好为 的所有进程java;this 被扩展到for循环中,它将输出的新行分配给pgrep ^java$变量$prenice -n 5 -p $p在每次迭代中运行,直到pgrep ^java$消耗了输出


Cyr*_*rus 6

尝试这个:

pgrep java | xargs -n 1 echo renice -n 5 -p
Run Code Online (Sandbox Code Playgroud)

如果输出正常,则删除echo.