Ubuntu – How to change niceness of process by name

bashcronniceprocess

Java process is killing my computer (Intel i3, 8GB RAM). It takes over whole CPU and system starts to hang. I was trying to change niceness of java processes but i have to control it for all time and this is not always possible. So for beginning I tried to construct a command to change process niceness by name. Ended up with something like this:

ps ax -o pid,comm | grep java | awk '{print $1}' | tr "\n" " " | renice -n 5 -p

But it looks like it doesn't work. And I don't know where to go next. Bash script maybe? Run it by cron or by watch every x time? Or is there a better way?

Best Answer

If you have only one java instance running, simply:

renice -n 5 -p $(pgrep ^java$)
  • $(pgrep ^java$): command substitution; bash replaces this with the output of pgrep ^java$; pgrep ^java$ returns the list of PIDs of the processes whose name matches the regular expression ^java$, which matches all processes whose name is exactly java

If you have multiple java instances running:

for p in $(pgrep ^java$); do renice -n 5 -p $p; done
  • for p in $(pgrep ^java$); do renice -n 5 -p $p; done: almost the same as above; $(pgrep ^java$) is a command substitution; bash replaces this with the output of pgrep ^java$; pgrep ^java$ returns the list of PIDs of the processes whose name matches the regular expression ^java$, which matches all processes whose name is exactly java; this is expanded into the for loop, which assigns a new line of the output of pgrep ^java$ to the variable $p and runs renice -n 5 -p $p at each iteration until the output of pgrep ^java$ is consumed