nice and renice command usage examples for process priority in linux

Sarath Pillai's picture
nice and renice command

On a Linux machine, there are hundred's of processes, that are continuously  running for some or the other tasks. Linux Kernel does a fantastic job in mediating between these processes and allotting CPU to these processes.

An interesting question arises when you read that line "kernel allocates CPU to all the process".

  • Computer is made to do whatever task is given, So how will kernel come to know about a particular process, which i want to be on top of the list on priority?

Related: Linux Processes:  A complete Tutorial to understanding Processes in Linux

The answer to that question is , "You can infact ask the kernel to put a particular process of yours, on higher priority than others".

This can be easily achieved with the help of a command called "Nice" in Linux.

 

What Does Nice Command In Linux Do?

 

With the help of Nice command in Linux you can set process priority. If you give a process a higher priority, then Kernel will allocate more cpu time to that process.

By default when a programe is launched in Linux, it gets launched with the priority of '0'. However you can change the priority of your programes by either of the following methods.

  1. You can launch a programe with your required priority.
  2. Or you can also change the priority of an already running process.

 

How can i see priority of a processes running in Linux?

You can see the process priority by running ps command with "-al" option as shown below.

F   UID   PID  PPID PRI  NI    VSZ   RSS WCHAN  STAT TTY        TIME COMMAND
4     0  4075  4057  15   0   4664  1504 -      Ss+  pts/0      0:00 -bash
4     0  4481     1  15   0   1656   436 -      Ss+  tty2       0:00 /sbin/minge
tty tty2
4     0  4485     1  15   0   1656   436 -      Ss+  tty3       0:00 /sbin/minge
tty tty3
4     0  4488     1  19   0   1656   452 -      Ss+  tty4       0:00 /sbin/minge
tty tty4

The column that starts with "NI" shows the nice value(priority of the process). You can clearly see that most of them has got a '0' priority.

You can also see the process priority(nice value) using "top" command.Below shown is an example output of top command.

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 8018 root      15   0  2192  908  716 R  2.0  0.2   0:00.01 top
    1 root      15   0  2064  624  536 S  0.0  0.1   0:03.13 init
    2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 migration/0
    3 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/0
    4 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0
    5 root      10  -5     0    0    0 S  0.0  0.0   0:00.24 events/0
    6 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 khelper
    7 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 kthread
   10 root      10  -5     0    0    0 S  0.0  0.0   0:02.73 kblockd/0

In the top command output shown above nice value(process priority) can be seen from the "NI" column.

Understanding Nice Command in Linux

The syntax of nice command in linux is quite simple.Help for nice command can be listed by the following method.

[root@myvm1 ~]# nice --help
Usage: nice [OPTION] [COMMAND [ARG]...]
Run COMMAND with an adjusted niceness, which affects process scheduling.
With no COMMAND, print the current niceness.  Nicenesses range from
-20 (most favorable scheduling) to 19 (least favorable).
 
  -n, --adjustment=N   add integer N to the niceness (default 10)
      --help     display this help and exit
      --version  output version information and exit
 
NOTE: your shell may have its own version of nice, which usually supersedes
the version described here.  Please refer to your shell's documentation
for details about the options it supports.
 
Report bugs to <bug-coreutils@gnu.org>.

-n and --adjustment can be used to set the priority of your process.You can also use -<required number> to set the process priority to that value.

For example

nice -10 <command name> Will set a process with the priority of "10".

Running nice command with no options will give you the priority with which the current shell is running.

[root@myvm1 ~]# nice
0
[root@myvm1 ~]#

What is the range of nice priority values?

Process priority values range from -20 to 19.

A process with the nice value of -20 is considered to be on top of the priority. And a process with nice value of 19 is considered to be low on the priority list.

Understand the above line very carefully, a nice value of numerically higher number is low on priority and a nice value of numerically low number is higher on priority.

running a process with nice command with no options will set that process's priority to 10.(so you can considerably increase your process priority without any options.)

Normal users can only decrease their process priority. However root user can increase/decrease all process's priority.

Lets clear a confusion that majorly exists in terms of using nice.

nice -10 <command name>  and nice -n 10 <command name>   will do the same thing.(both the above commands will make the process priority to the value 10).

A major misconception about nice command is that nice -10 <command name> will run that process with -10(a higher priority).

In order to assign -10 priority to a command then you should run it as shown below.

nice --10 <command name>

Make a note of the double --, the first one is the command option(-), and the second one is the numerical -(minus).

Note: You can only use nice command to change the process priority when you launch it. You cannot use nice command to change the priority of an already running process.

 

Changing the priority of an already running process in linux

In order to change the priority of an already running process you can use "renice" command.

Suppose you see that your machine is running slow due to some lengthy process(which is not a required process at the moment), then you can reduce the priority of that process with the help of renice command. And also increase the priority of your required process at the moment.

renice command is very much similar to the nice command( interms of options in priority), however it does differ slightly in terms of parameters. You can give username,groupname etc in renice command as a parameter.

Some examples of renice command is as follows:

renice -4 -p 3423 (this will set the priority of process id no 3423 to -4, which will inturn increase its priority over others)

renice 13 -p 3564 -u sarath (this will set the priority of the process id 3564 to 13, and all the process owned by user "sarath" to the priority of 13)

renice 14 -u sarath,satish -g custom (this will set all process owned by "sarath","satish" and also the group "custom" to 14)

 

Hope this post was helpful in understanding the usage of nice and renice command in Linux.

Rate this article: 
Average: 4.4 (1745 votes)

Comments

Thanks for the post.....

xrenice project, like xkill lets you to renice priority by one click on app.
On GitHub - https://github.com/firebbs/xrenice

slashmaster's picture

Hi Liva,

Thanks for the comment and github link for xrenice...

 

Clearly describe each and evrythnig...

Thanksss cheerss!!!

thanks for the usefull info

It was precise and exact, excellent my friend. I have some questions :-

1. Can this nice value be set permanently for a process/program/process ID/command, so that every time it runs it runs wih the same priority?
2. can you please explain more with some examples?

My email ID is :- chopraamit22@gmail.com

Thanks & Regards
Amit Chopra

Sarath Pillai's picture

Hi Amit,

To set priority permanently, you need to include the nice priority stuff inside a script which will run your application and increase its priority. As priority and nice value is done on process id's.

For example, run your application like this (by a script)

#!/bin/bash
/bin/<whatever executable of ur app> &
renice <value> `jobs -p 1`

Another method to do this is to fix a default priority for all process run by a particular user in /etc/security/limits.conf.. I exactly don't remember the syntax for doing that, but you can find that out..

Regards

Nice article in illustrative way ...

Thank you.

looking for sh script to set nice level by name, using grep or other way ...

Very useful thanks

Vgood

Thanks for sharing such a easy explanation

nice :)

Dear Linux brethren, I really appreciate this article and its briefings and many others articles that I have yet to explore. My Allah bless you and your families for helping and alighting us. thank you once more, sincerely, nasir

thanks you so much for explaning it in so much detail. it is really helpful.

Awesome

Nice Post with detail information

Good useful

Thanks for the post.....

Very nice article

Add new comment

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.