Linux之进程管理(2)相关命令之四

设置或调整进程优先级命令: nice  rnice

nice 命令

nice - run a program with modified scheduling priority

运行一个程序时修改调度其进程优先级

格式及用法:

nice  [options]  [command [args]]

    -n  # #表示要设置此程序nice值,-2019,值越下,优先级越高

注:-2019的每个nice值分别对应(Centos5中为100-139CentOS6中为0-3940个优先级值,而优先级值越高,nice值越小,对应的进程就越优先运行,且占用更多的CPU运行资源空间。当然,还有实时优先级,也就是当优先级相同时,还会通过实时优先级来比较,实时优先级值为99-0,其中值越大,对应的优先级越高。

 

案例:

#pts/0终端中打开一个nice值为20vim进程

[root@localhost ~]# nice -n 20 vim file.txt

#切换到pts/1终端上去查看其nice

[root@localhost ~]# ps axo pid,comm,ni | grep '\<vim'
 46853 vim              19

解析:这里为什么会显示19,因为nice值规定最小为-20,最大为19,所有设置nice高于最大值或者低于最小值,系统都会认为其为默认最大值或最小值。

 

#打开两个后台vim进程,nice值都为-10

[root@localhost ~]# nice -n -10 vim file1 &
[1] 46941

#打开第二个的时候,第一个进程被停止

[root@localhost ~]# nice -n -10 vim file2 &
[2] 46942
 
[1]+  Stopped                 nice -n -10 vim file1

#此时查看jobs作业队列中信息

[root@localhost ~]# jobs
[1]-  Stopped                 nice -n -10 vim file1
[2]+  Stopped                 nice -n -10 vim file2

解析:+表示占用队列中。说明,此时vim在同一终端优先存储2号作业在内存的数据划分。

#查看其优先级和nice

#两值的prioity值和nice值都一样

[root@localhost ~]# ps -C vim -o pid,comm,ni,pri
   PID COMMAND          NI PRI
 46941 vim             -10  29
 46942 vim             -10  29

注意:这里的prioity值并不是上面说的nice值对应的40种优先级

 

rnice 命令

用法选项:

rnice  -n  prioity  PID        #表示对应PID进程的原prioity+指定的prioity=新的nice

rnice  prioity PID             #表示对应PID进程的指定的prioity值-prioity=新的nice

注:无论那种方式,普通用户自能调高自己进程的 nice值。

 

案例:

#重新设置第二个vim,及PID46906的进程的nice

[root@localhost ~]# renice -n 20 `pgrep -f '^vim[[:space:]].*2'`
46942 (process ID) old priority -10, new priority 19

解析:这里显示了一段信息,说新的nice值为19,为此进程原来的priority(29)加上设置的nice值,及29+(-10)=19

#再次查看两个vim进程的优先级及nice

[root@localhost ~]# ps -C vim -o pid,cmd,comm,ni,pri
   PID CMD                      COMMAND     NI  PRI
 46941 vim file1                   vim           -10  29
 46942 vim file2                   vim           19   0

解析:因为vim file2进程的nice值为19nice值越大,优先级值越小。

 

测试普通用户只能调大自己进程的nice

#切换到普通用户

[root@localhost ~]# su - hadoop
Last login: Wed Sep  7 21:47:06 EDT 2016 on pts/2

#开启nice值为10vim进程

[hadoop@localhost ~]$ nice -n 10 vim file1 &
[1] 47037

#查在后台作业存在刚才的进程

[hadoop@localhost ~]$ jobs
[1]+  Stopped                 nice -n 10 vim file1

#查看vim进程nice值及优先级值

[hadoop@localhost ~]$ ps axo pid,comm,ni,pri,rtprio | grep vim
 47037 vim              10   9      -

#调整nice值为当前优先级+(-9),及9-9=0

[hadoop@localhost ~]$ renice -n -9 47037
renice: failed to set priority for 47037 (process ID): Permission denied

解析:进程原来nice值为10,如果设置为0就相当于提供了优先级,而作为普通用户,是无法与其他用户的进程抢占优先级的。

#那么不能调低,把自己nice值直接设置为29-10=19,提高nice值

[hadoop@localhost ~]$ renice 29 47037
47037 (process ID) old priority 10, new priority 19

解析:nice值为友好值,及只能牺牲自己进程的优先级来为其它用户的进程提供更多的CPU资源空间。