精华内容
下载资源
问答
  • linux下如何修改进程优先级

    千次阅读 2015-06-24 17:46:36
    如果运行 top 命令,默认将按照 CPU 使用量的降序显示进程,如清单 1 所示。在上一篇文章 “学习 Linux,101:创建、监控和终止进程” 中,我们展示了一个简易的数字时钟脚本,它每 30 秒在控制台打印,其他时间不...

    Linux 与其他现代操作系统一样,也可以运行多个进程。它在多个进程之间共享 CPU 和其他资源。如果一个进程占用了 100% 的 CPU,那么其他进程将无法响应。

    如果运行 top 命令,默认将按照 CPU 使用量的降序显示进程,如清单 1 所示。在上一篇文章 “学习 Linux,101:创建、监控和终止进程” 中,我们展示了一个简易的数字时钟脚本,它每 30 秒在控制台打印,其他时间不执行任何操作。如果我们运行该进程,它可以不会出现在 top 的输出列表上,因为该进程大部分时间不使用 CPU。

    清单 1. Linux 工作站上 top 命令的典型输出
    top - 08:00:52 up 1 day, 10:20,  5 users,  load average: 0.04, 0.08, 0.04
    Tasks: 172 total,   1 running, 171 sleeping,   0 stopped,   0 zombie
    Cpu(s):  3.7%us,  0.3%sy,  0.0%ni, 95.6%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
    Mem:   4057976k total,  1777976k used,  2280000k free,   225808k buffers
    Swap: 10241428k total,        0k used, 10241428k free,   655796k cached
    
      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
    11220 ian       20   0  555m 106m  27m S    8  2.7  36:06.16 firefox            
        7 root      15  -5     0    0    0 S    1  0.0  10:59.36 ksoftirqd/1        
    10849 ian       20   0  212m  15m  10m S    0  0.4   0:08.11 gnome-terminal     
        1 root      20   0 19584 1888 1196 S    0  0.0   0:00.83 init               
        2 root      15  -5     0    0    0 S    0  0.0   0:00.01 kthreadd           
        3 root      RT  -5     0    0    0 S    0  0.0   0:00.02 migration/0        
        4 root      15  -5     0    0    0 S    0  0.0   0:01.08 ksoftirqd/0        
        5 root      RT  -5     0    0    0 S    0  0.0   0:00.00 watchdog/0         
        6 root      RT  -5     0    0    0 S    0  0.0   0:00.03 migration/1

    您的系统可能有很多命令都会占用大量 CPU。比如视频编辑工具、转换不同图片格式的程序或者音频编码转换程序(如将 mp3 转换为 ogg)等。

    如果您只有一个 CPU 或者 CPU 的数量有限,那么必须决定如何在几个计算进程之间共享这些有限的 CPU 资源。通常的做法是,选择一个要执行的进程,并让它在短时间内运行(这个时间称为时间片),或者一直运行到它需要等待的一些事件,如要完成的 IO 等。为了确保重要的进程能够得到 CPU,这种选择是基于调度优先级 进程的。清单 1 中的 NI 列展示了调度优先级或者说每个进程的 niceness。niceness 的范围一般从 -20 到 19,-20 表示调度优先级最高,19 表示优先级最低。

    使用 ps 查看 niceness

    除了 top 命令之外,您还可以使用 ps 命令显示 niceness 值。您可以按照从文章 “学习 Linux,101:创建、监控和终止进程” 中学到的方式自定义输出,也可以使用 -l 选项获取长清单。ps -l 的结果如清单 2 所示。如果使用 top 命令,请在 NI 列中查看 niceness 值。

    清单 2. 使用 ps 查看 niceness
    ian@attic4:~$ ps -l
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    0 S  1000 26502 26501  0  80   0 -  5368 wait   pts/4    00:00:00 bash
    0 R  1000 27046 26502  0  80   0 -  1684 -      pts/4    00:00:00 ps

    niceness 的默认值

    从清单 1 和清单 2 中我们可以猜测出,常规用户所启用进程的 niecess 的默认值是 0。在当前的 Linux 系统中通常是这样。您可以运行 nice 命令且不带任何参数,以此验证您的 shell 和系统中的该值,如清单 3 所示。

    清单 3. 查看默认 niceness
    ian@attic4:~$ nice
    0

    设置优先级

    在查看如何设置或更改 niceness 值之前,我们先构建一个 CPU 密集型小脚本,演示 niceness 的工作方式。

    CPU 密集型脚本

    我们将创建一个小脚本,它占用较多的 CPU,但执行的操作很简单。该脚本有两个输入:计数和标签。它打印标签以及当前的日期和时间,然后旋转,递减计数,直到它到达 0,最后再次打印标签和日期。该脚本如清单 4 所示,它没有任何错误检查机制,也不是非常稳定,但是它足以满足我们的演示需要。

    清单 4. CPU 密集型脚本
    ian@attic4:~$ echo 'x="$1"'>count1.sh
    ian@attic4:~$ echo 'echo "$2" $(date)'>>count1.sh
    ian@attic4:~$ echo 'while [ $x -gt 0 ]; do x=$(( x-1 ));done'>>count1.sh
    ian@attic4:~$ echo 'echo "$2" $(date)'>>count1.sh
    ian@attic4:~$ cat count1.sh
    x="$1"
    echo "$2" $(date)
    while [ $x -gt 0 ]; do x=$(( x-1 ));done
    echo "$2" $(date)

    如果在系统上运行该脚本,它的输出将类似于清单 5。您可能需要增加计数值以查看时间的不同,具体取决于您系统的速度。该脚本将占用大量 CPU,等会我们就会看到这一点。如果您的默认 shell 不是 Bash,如果您的脚本无法运行,那么可以使用下文所示的第二种调用形式。如果您使用的不是自己的工作站,运行脚本前请确保占用大量 CPU 不会导致不良影响。

    清单 5. 运行 count1.sh
    ian@attic4:~$ sh count1.sh 10000 A
    A Wed Jan 20 08:34:16 EST 2010
    A Wed Jan 20 08:34:16 EST 2010
    ian@attic4:~$ bash count1.sh 99000 A
    A Wed Jan 20 08:34:20 EST 2010
    A Wed Jan 20 08:34:22 EST 2010

    到目前为止一切顺利。现在让我们创建一个在后台运行的脚本,并启动 top 命令查看脚本所用 CPU 的命令清单(请参见之前的文章 “学习 Linux,101:Linux 命令行” 了解最新的命令清单)。命令清单如清单 6 所示,top 的输出见清单 7。

    清单 6. 运行 count1.sh 和 top
    ian@attic4:~$ (sh count1.sh 5000000 A&);top
    清单 7. 占用大量 CPU
    top - 15:41:15 up 1 day, 17:59,  6 users,  load average: 0.20, 0.06, 0.02
    Tasks: 169 total,   2 running, 167 sleeping,   0 stopped,   0 zombie
    Cpu(s): 52.1%us,  0.7%sy,  0.0%ni, 47.3%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
    Mem:   4057976k total,  1393772k used,  2664204k free,   235596k buffers
    Swap: 10241428k total,        0k used, 10241428k free,   662592k cached
    
      PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
    26756 ian       20   0  4004  588  496 R  100  0.0   0:03.53 sh
    11220 ian       20   0  555m 101m  27m S    5  2.6  57:58.07 firefox
    26757 ian       20   0 19132 1364  980 R    0  0.0   0:00.03 top
        1 root      20   0 19584 1888 1196 S    0  0.0   0:00.89 init
        2 root      15  -5     0    0    0 S    0  0.0   0:00.01 kthreadd

    不错。我们只使用了一个简单的脚本就占用了系统中一个 CPU 100% 的资源。如果希望占用多个 CPU,您可以在命令清单中添加对 count1.sh 的调用。如果运行过类似的作业,您会发现我们将无法在系统上执行其他工作(其他用户也是如此)。

    使用 nice 设置优先级

    现在我们可以让 CPU 持续忙碌一段时间,我们了解如何设置进程的优先级。目前我们学到的内容总结如下:

    • Linux 和 UNIX® 系统使用有 40 个优先级的优先级系统,范围从 -20(最高优先级)到 19(最低优先级)。
    • 常规用户启动的进程优先级一般是 0。
    • ps 命令可以使用 -l 选项显示优先级(例如,nice 或 NI、level)。
    • nice 命令显示我们的默认优先级。

    nice 命令还可以用来启动具有不同优先级的进程。使用 -n 或 (--adjustment) 选项时带一个负值可以增加优先级值,带一个正值将减少优先级值。记住,具有最低优先级值的进程运行时有最高调度优先级,因此可以这样记忆,增加优先级值对于其他进程而言更好(nice)。注意,您必须是超级用户(根用户)才能调低优先级值。换句话说,常规用户通常只能增加它们的优先级值。

    为了演示如何使用 nice 设置优先级,首先同时在不同的 subshell 中启动两个 count1.sh 脚本的副本,但是将其中一个的 nice 值设置为最大值 19。一会儿之后,我们使用 ps -l 显示进程状态,包括 niceness。最后,我们添加任意 30 秒的休眠时间,确保两个 subshell 完成之后命令序列完成。这样一来,我们在等待输出时不会得到新的提示。结果如清单 8 所示。

    清单 8. 使用 nice 设置一对进程的优先级
    ian@attic4:~$ (sh count1.sh 2000000 A&);(nice -n 19 sh count1.sh 2000000 B&);\
    > sleep 1;ps -l;sleep 10
    A Thu Jan 21 14:38:39 EST 2010
    B Thu Jan 21 14:38:39 EST 2010
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    0 R  1000   946     1 99  80   0 -  1001 -      pts/3    00:00:01 sh
    0 R  1000   948     1 99  99  19 -  1001 -      pts/3    00:00:01 sh
    0 R  1000   952 32408  0  80   0 -  1684 -      pts/3    00:00:00 ps
    0 S  1000 32408 32407  0  80   0 -  5368 wait   pts/3    00:00:02 bash
    A Thu Jan 21 14:38:45 EST 2010
    B Thu Jan 21 14:38:45 EST 2010

    您对两个作业同时完成感到奇怪吗?我们的优先级设置怎么了?记住,脚本占用了一个 CPU。这个系统运行在 AMD Athlon™ 7750 双核处理器上,它的负载很轻,每个内核运行一个进程,不需要进行优化。

    那么,让我们使用 4 个不同的 niceness 水平(0、6、12、18)启动 4 个进程查看会发生什么情况。我们将增加每个进程的忙碌计数参数使之运行的时间更长一些。查看清单 9 之前,请根据您了解的内容,预期一下会发生什么情况。

    清单 9. 使用 nice 设置 4 个进程的属性
    ian@attic4:~$ (sh count1.sh 5000000 A&);(nice -n 6 sh count1.sh 5000000 B&);\
    > (nice -n 12 sh count1.sh 5000000 C&);(nice -n 18 sh count1.sh 5000000 D&);\
    > sleep 1;ps -l;sleep 30
    A Thu Jan 21 16:06:00 EST 2010
    C Thu Jan 21 16:06:00 EST 2010
    D Thu Jan 21 16:06:00 EST 2010
    B Thu Jan 21 16:06:00 EST 2010
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
    0 R  1000  1422     1 94  80   0 -  1001 -      pts/3    00:00:00 sh
    0 R  1000  1424     1 42  86   6 -  1001 -      pts/3    00:00:00 sh
    0 R  1000  1427     1 56  92  12 -  1001 -      pts/3    00:00:00 sh
    0 R  1000  1431     1 14  98  18 -  1001 -      pts/3    00:00:00 sh
    0 R  1000  1435 32408  0  80   0 -  1684 -      pts/3    00:00:00 ps
    0 S  1000 32408 32407  0  80   0 -  5368 wait   pts/3    00:00:02 bash
    A Thu Jan 21 16:06:14 EST 2010
    B Thu Jan 21 16:06:17 EST 2010
    C Thu Jan 21 16:06:26 EST 2010
    D Thu Jan 21 16:06:30 EST 2010

    使用 4 个不同的优先级我们发现,每个作业按照优先级顺序完成。请自行尝试不同的 nice 值演示各种可能的情况。

    使用 nice 启动进程最后要注意的一点是:使用 nohup 命令时,不能使用命令清单或管道作为 nice 的参数。


    更改优先级

    renice

    如果您正好启动了一个进程,但意识到它应该以不同的优先级运行,那么有一种方法可以在启动之后对其进行更改,即使用 renice 命令。您可以为进程指定一个绝对优先级(不是调整值),进程的更改如清单 10 所示。

    清单 10. 使用 renice 更改优先级
    ian@attic4:~$ sh count1.sh 10000000 A&
    [1] 1537
    ian@attic4:~$ A Thu Jan 21 16:17:16 EST 2010
    sh count1.sh 1renice 1 1537;ps -l 1537
    1537: old priority 0, new priority 1
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY        TIME CMD
    0 R  1000  1537 32408 99  81   1 -  1001 -      pts/3      0:13 sh count1.sh 100
    ian@attic4:~$ renice +3 1537;ps -l 1537
    1537: old priority 1, new priority 3
    F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY        TIME CMD
    0 R  1000  1537 32408 99  83   3 -  1001 -      pts/3      0:18 sh count1.sh 100

    /

    另一种修改运行进程优先级方法:

    top命令

    先键入top命令,top执行后,键入r,提示PID to renice:  如下图:

    键入所需修改优先级的PID,提示"Renice PID  to value:" ,键入niceness值,完成优先级修改。

    Attention: 您必须是超级用户才能为进程指定更高的调度优先级,或者说让它们的 nice 值更低。

     

    展开全文
  • 文章目录1,查看进程信息,ps查看系统进程快照2,查看进程信息,top查看进程动态信息,q退出3,查看进程信息,/proc目录查看进程详细信息4,修改进程优先级,nice按用户指定的优先级运行进程5,修改进程优先级,...

    1,查看进程信息,ps查看系统进程快照

    a,ps -ef|more

    linux@linux:~$ ps -ef|more
    
    1. "-ef"显示系统中所有的进程信息
    2. 管道符’|'加"more",让进程信息一屏一屏显示
    UID        PID  PPID  C STIME TTY          TIME CMD
    root         1     0  0 11:36 ?        00:00:01 /sbin/init
    root         2     0  0 11:36 ?        00:00:00 [kthreadd]
    root         3     2  0 11:36 ?        00:00:00 [ksoftirqd/0]
    root         4     2  0 11:36 ?        00:00:00 [kworker/0:0]
    root         5     2  0 11:36 ?        00:00:00 [kworker/0:0H]
    --More--
    
    1. UID创建进程的用户的ID
    2. PID进程的进程号
    3. PPID进程的父进程号
    4. C CPU占用率
    5. STIME进程的开始时间
    6. TTY进程所关联的终端
    7. TIME进程执行时所占用的时间
    8. CMD进程所对应的程序的名称

    b,ps -ef|grep

    编写程序test.c

    #include <stdio.h> 
    
    int main(int argc, const char *argv[])
    {
    	while(1);
    	return 0;
    }
    

    编译并运行

    linux@linux:~/test/process$ gcc test.c -o test.out
    linux@linux:~/test/process$ ./test.out 
    
    

    在另一终端中

    linux@linux:~$ ps -ef|grep test
    linux     3472  2764 89 11:57 pts/11   00:00:05 ./test.out
    linux     3475  3407  0 11:58 pts/1    00:00:00 grep --color=auto test
    

    c,ps -aux|more

    linux@linux:~$ ps -ef|more
    UID        PID  PPID  C STIME TTY          TIME CMD
    root         1     0  0 11:36 ?        00:00:01 /sbin/init
    root         2     0  0 11:36 ?        00:00:00 [kthreadd]
    ...
    ...
    linux@linux:~$ ps -aux|more
    USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
    root         1  0.0  0.1   4460  1956 ?        Ss   11:36   0:01 /sbin/init
    root         2  0.0  0.0      0     0 ?        S    11:36   0:00 [kthreadd]
    root         3  0.0  0.0      0     0 ?        S    11:36   0:00 [ksoftirqd/0]
    root         4  0.0  0.0      0     0 ?        S    11:36   0:00 [kworker/0:0]
    --More--
    
    1. STAT当前进程状态
    2. man ps命令可以查看相关的状态说明

    d,ps -aux|grep

    linux@linux:~$ ps -ef|grep test
    linux     3529  2764 99 12:00 pts/11   01:24:33 ./test.out
    linux     3577  3407  0 13:25 pts/1    00:00:00 grep --color=auto test
    linux@linux:~$ ps -aux|grep test
    linux     3529 99.2  0.0   2024   280 pts/11   R+   12:00  89:46 ./test.out
    linux     3593  0.0  0.0   6108   856 pts/1    S+   13:31   0:00 grep --color=auto test
    

    2,查看进程信息,top查看进程动态信息,q退出

    linux@linux:~$ top
    
    top - 13:52:49 up  2:16,  3 users,  load average: 0.78, 0.49, 0.73
    Tasks: 187 total,   2 running, 185 sleeping,   0 stopped,   0 zombie
    %Cpu(s): 94.3 us,  5.7 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    KiB Mem:   1025492 total,   720900 used,   304592 free,     2320 buffers
    KiB Swap:  1951740 total,   173664 used,  1778076 free.   159884 cached Mem
    
      PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                    
     3604 linux     20   0    2024    276    224 R 82.6  0.0   1:16.48 test.out                   
     1390 root      20   0  282816  26976   8500 S  8.7  2.6   0:21.62 Xorg                       
     2537 linux     20   0  319316  44736  17704 S  4.0  4.4   0:38.76 compiz                     
     2758 linux     20   0  128916  14236   7472 S  4.0  1.4   0:05.86 gnome-terminal             
     1664 root      20   0   20584   2632   1908 S  0.3  0.3   0:07.32 vmtoolsd                   
     3605 linux     20   0    6856   1428   1036 R  0.3  0.1   0:00.08 top                        
        1 root      20   0    4460   1956   1124 S  0.0  0.2   0:01.83 init                       
        2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd  
    
    1. NI进程优先级[-20,19],值越小优先级越高,默认是0

    3,查看进程信息,/proc目录查看进程详细信息

    a,运行程序

    linux@linux:~/test/process$ ./test.out 
        
    

    b,在另一终端中查看进程号

    linux@linux:~$ ps -aux|grep test
    linux     3604 99.0  0.0   2024   276 pts/11   R+   13:51   8:20 ./test.out
    linux     3608  0.0  0.0   6108   856 pts/1    S+   13:59   0:00 grep --color=auto test
    
    1. 可得知test.out进程号是3604

    c,进入/proc目录下的/3604目录

    linux@linux:~$ cd /proc/
    linux@linux:/proc$ ls
    1     129   146   20    2364  2561  2850  425  9            ipmi           scsi
    10    13    147   21    2365  2564  2858  43   905          irq            self
    1007  130   148   2101  2370  2581  2883  45   911          kallsyms       slabinfo
    1093  131   149   2184  2384  2591  29    46   acpi         kcore          softirqs
    1099  132   1497  2187  2408  26    2906  5    asound       key-users      stat
    11    133   15    22    2410  2638  2939  514  buddyinfo    kmsg           swaps
    1105  1332  150   2259  2414  2641  3     567  bus          kpagecount     sys
    1106  134   151   2270  2416  2655  30    595  cgroups      kpageflags     sysrq-trigger
    1109  135   152   2278  2419  2660  3020  599  cmdline      latency_stats  sysvipc
    112   136   153   2285  2422  2670  3022  601  consoles     loadavg        timer_list
    114   137   16    2301  2424  2672  31    602  cpuinfo      locks          timer_stats
    116   138   1627  2303  2428  2691  3119  603  crypto       mdstat         tty
    1162  139   1664  2305  2440  27    3285  613  devices      meminfo        uptime
    1165  1390  17    2309  2480  2733  3288  619  diskstats    misc           version
    1178  14    1745  2311  2494  2758  337   620  dma          modules        version_signature
    119   140   1762  2331  2496  2763  3407  621  driver       mounts         vmallocinfo
    12    1403  1795  2340  25    2764  351   633  execdomains  mpt            vmstat
    1211  141   18    2349  2504  2779  3604  69   fb           mtrr           zoneinfo
    122   1411  181   2350  2509  28    3613  7    filesystems  net
    125   142   19    2354  2531  2817  4     70   fs           pagetypeinfo
    127   143   193   2355  2537  2824  415   794  interrupts   partitions
    128   144   194   2361  2554  2838  418   8    iomem        sched_debug
    1287  145   2     2363  2558  2843  424   844  ioports      schedstat
    
    1. /3604目录下就是test.out进程的详细信息
    linux@linux:/proc$ cd 3604/
    linux@linux:/proc/3604$ ls
    attr        coredump_filter  gid_map    mem         oom_score      schedstat  syscall
    autogroup   cpuset           io         mountinfo   oom_score_adj  sessionid  task
    auxv        cwd              latency    mounts      pagemap        smaps      timers
    cgroup      environ          limits     mountstats  personality    stack      uid_map
    clear_refs  exe              loginuid   net         projid_map     stat       wchan
    cmdline     fd               map_files  ns          root           statm
    comm        fdinfo           maps       oom_adj     sched          status
    
    1. status文件中存放了进程的详细信息
    linux@linux:/proc/3604$ cat status
    Name:	test.out
    State:	R (running)
    Tgid:	3604
    Ngid:	0
    Pid:	3604
    PPid:	2764
    TracerPid:	0
    Uid:	1000	1000	1000	1000
    Gid:	1000	1000	1000	1000
    FDSize:	256
    Groups:	4 24 27 30 46 108 124 1000 
    VmPeak:	    2112 kB
    VmSize:	    2024 kB
    VmLck:	       0 kB
    VmPin:	       0 kB
    VmHWM:	     276 kB
    VmRSS:	     276 kB
    VmData:	      28 kB
    VmStk:	     136 kB
    VmExe:	       4 kB
    VmLib:	    1828 kB
    VmPTE:	      16 kB
    VmSwap:	       0 kB
    Threads:	1
    SigQ:	0/7861
    SigPnd:	0000000000000000
    ShdPnd:	0000000000000000
    SigBlk:	0000000000000000
    SigIgn:	0000000000000000
    SigCgt:	0000000000000000
    CapInh:	0000000000000000
    CapPrm:	0000000000000000
    CapEff:	0000000000000000
    CapBnd:	0000001fffffffff
    Seccomp:	0
    Cpus_allowed:	ff
    Cpus_allowed_list:	0-7
    Mems_allowed:	1
    Mems_allowed_list:	0
    voluntary_ctxt_switches:	1
    nonvoluntary_ctxt_switches:	42261
    
    1. /fd目录中存放了进程打开的所有文件的信息
    linux@linux:/proc/3604$ ll fd
    total 0
    dr-x------ 2 linux linux  0 11月  6 13:59 ./
    dr-xr-xr-x 9 linux linux  0 11月  6 13:51 ../
    lrwx------ 1 linux linux 64 11月  6 14:10 0 -> /dev/pts/11
    lrwx------ 1 linux linux 64 11月  6 14:10 1 -> /dev/pts/11
    lrwx------ 1 linux linux 64 11月  6 13:59 2 -> /dev/pts/11
    

    4,修改进程优先级,nice按用户指定的优先级运行进程

    a,运行程序test.out,使用top命令先查看一下优先级NI

      PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                    
     3604 linux     20   0    2024    276    224 R 93.4  0.0  33:01.93 test.out                   
     1390 root      20   0  283460  27132   8504 R  3.3  2.6   0:32.40 Xorg                       
     2758 linux     20   0  133492  15904   8976 S  2.0  1.6   0:10.35 gnome-terminal             
     2537 linux     20   0  319296  44796  17760 S  1.0  4.4   0:46.36 compiz                     
        1 root      20   0    4460   1956   1124 S  0.0  0.2   0:01.83 init                       
        2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                   
    

    b,可以看到test.out运行优先级是默认的0,“Ctrl+C”终止程序,以nice -n 3 ./test.out运行

    ^C
    linux@linux:~/test/process$ nice -n 3 ./test.out
    
    
      PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                    
     3682 linux     23   3    2024    280    224 R 84.2  0.0   2:13.46 test.out                   
     1390 root      20   0  283460  26940   8504 R 10.0  2.6   0:34.95 Xorg                       
     2758 linux     20   0  133492  15904   8976 S  3.3  1.6   0:11.55 gnome-terminal             
     2537 linux     20   0  319500  44968  17764 S  2.0  4.4   0:47.58 compiz                     
        1 root      20   0    4460   1956   1124 S  0.0  0.2   0:01.83 init                       
        2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                   
    
    1. 可以看到test.out进程优先级变为了3
    2. 使用nice时,普通用户更改优先级智能在[0,19]范围内,管理员可以操作[-20,19]

    5,修改进程优先级,renice改变正在运行进程的优先级

    a,在终端一内运行test.out

    linux@linux:~/test/process$ ./test.out 
    
    

    b,在终端二内使用top查看进程状态

      PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                    
     3687 linux     20   0    2024    276    224 R 90.3  0.0   2:10.60 test.out                                                
     2364 linux     20   0  116764  11228   5516 S  0.3  1.1   0:00.87 ibus-ui-gtk3               
     2581 linux     20   0   61724   5572   3700 S  0.3  0.5   0:12.14 vmtoolsd                   
        1 root      20   0    4460   1956   1124 S  0.0  0.2   0:01.83 init                       
        2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                                 
    

    c,在终端三内使用renice -n 4 3687,改变进程优先级

    linux@linux:~/test/process$ renice -n 4 3687
    3687 (process ID) old priority 0, new priority 4                              
    

    d,在终端二内看到进程优先级已经改变

      PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND                    
     3687 linux     24   4    2024    276    224 R 94.7  0.0   7:30.79 test.out                   
     1390 root      20   0  288356  27084   8516 S  3.0  2.6   0:40.57 Xorg                       
     2758 linux     20   0  134152  17436   9600 S  1.3  1.7   0:14.40 gnome-terminal                             
        1 root      20   0    4460   1956   1124 S  0.0  0.2   0:01.83 init                       
        2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd                                            
    
    1. 普通用户只能降低一个已有进程的优先级,即使NI值增大
    2. 管理员可以降低或提高进程优先级

    6,后台进程相关命令,jobs查看某个终端上的后台进程

    a,"Ctrl+C"用于结束一个进程,此时用jobs看不到后台有进程

    linux@linux:~/test/process$ ./test.out 
    ^C
    linux@linux:~/test/process$ jobs
    

    b,"Ctrl+Z"用于暂停一个进程,此时用jobs可以看到有一个进程在后台挂起,作业号为1

    linux@linux:~/test/process$ ./test.out 
    ^Z
    [1]+  Stopped                 ./test.out
    linux@linux:~/test/process$ jobs
    [1]+  Stopped                 ./test.out
    

    c,运行程序时,在后面加一个取地址符"&",代表该程序要在后台运行,用jobs可以看到又多了一个后台进程,作业号为2

    linux@linux:~/test/process$ ./test.out &
    [2] 3808
    linux@linux:~/test/process$ jobs
    [1]+  Stopped                 ./test.out
    [2]-  Running                 ./test.out &
    

    7,后台进程相关命令,fg把后台运行的进程放到前台运行

    linux@linux:~/test/process$ jobs
    [1]+  Stopped                 ./test.out
    [2]   Running                 ./test.out &
    [3]-  Running                 ./test.out &
    linux@linux:~/test/process$ fg 2
    ./test.out
    ^C
    linux@linux:~/test/process$ jobs
    [1]+  Stopped                 ./test.out
    [3]-  Running                 ./test.out &
    linux@linux:~/test/process$ fg 3
    ./test.out
    ^Z
    [3]+  Stopped                 ./test.out
    linux@linux:~/test/process$ jobs
    [1]-  Stopped                 ./test.out
    [3]+  Stopped                 ./test.out
    

    8,后台进程相关命令,bg将挂起的进程在后台运行

    linux@linux:~/test/process$ jobs
    [1]-  Stopped                 ./test.out
    [3]+  Stopped                 ./test.out
    linux@linux:~/test/process$ bg 3#将挂起的进程,作业3,在后台运行
    [3]+ ./test.out &
    linux@linux:~/test/process$ jobs
    [1]+  Stopped                 ./test.out
    [3]-  Running                 ./test.out &
    linux@linux:~/test/process$ fg 3#将后台进程,作业3,放到前台运行
    ./test.out
    ^C
    linux@linux:~/test/process$ jobs
    [1]+  Stopped                 ./test.out
    
    linux@linux:~/test/process$ jobs
    [1]+  Stopped                 ./test.out
    linux@linux:~/test/process$ fg 1#将挂起的进程,作业1,放到前台运行
    ./test.out
    ^Z
    [1]+  Stopped                 ./test.out
    linux@linux:~/test/process$ jobs
    [1]+  Stopped                 ./test.out
    linux@linux:~/test/process$ bg 1#将挂起的进程,作业1,在后台运行
    [1]+ ./test.out &
    linux@linux:~/test/process$ jobs
    [1]+  Running                 ./test.out &
    linux@linux:~/test/process$ fg 1#将挂起的进程,作业1,放到前台运行
    ./test.out
    ^C
    linux@linux:~/test/process$ jobs
    
    1. fg可以将后台运行的进程放到前台运行
    2. fg也可以将挂起的进程放到前台运行

    8,处理僵尸进程

    8.1,不处理僵尸进程

    在这里插入图片描述

    取消处理僵尸进程的语句后,可以看到:

    1. Ctl + C 关闭任一客户端
    2. [ps axj]查询进程状态,会发现出现一个僵尸进程

    8.2,处理僵尸进程

    在这里插入图片描述

    加入处理僵尸进程的语句后,可以看到:

    1. Ctl + C 关闭任一客户端
    2. [ps axj]查询进程状态,会发现没有僵尸进程
    展开全文
  • linux 进程优先级

    2018-07-02 20:43:32
    不用修改nice 范围-20~19进程优先级的数值越大,越晚,数值越小,越早图形化里-》系统监视器-》右键进程-》改变优先级关闭CPU /dev/system/cpu0/online把1改成0renice -n -20 PID 优先级增高,默认为0top -d l-&...

    进程的优先级=优先系数+nice

    chrt    修改优先系数,不用修改

    nice    范围-20~19

    进程优先级的数值越大,越晚,数值越小,越早

    图形化里-》系统监视器-》右键进程-》改变优先级

    关闭CPU    /dev/system/cpu0/online把1改成0

    renice -n -20 PID        优先级增高,默认为0

    top -d l->按r,调整某个PID的优先级

    nice    -n    -20    + command    使用最高优先级运行命令

    taskset -c 0(CPU号) + command    使命令到0号CPU运行

    展开全文
  • Linux进程优先级的调整方法

    千次阅读 2016-09-12 09:55:11
    查看进程优先级有两个办法:ps和toptop命令显示的NI列的值。或者可以使用ps -efl来查看,也是在ni列表示了进程的优先级。 进程的优先级可以在程序运行的时候设置,也可以在程序运行过程中动态的修改。 运 行的...

    linux下的进程调度优先级是从-20到19,一共40个级别,数字越大,表示进程的优先级越低。默认时候,进程的优先级是0。查看进程优先级有两个办法:ps和top。top命令显示的NI列的值。或者可以使用ps -efl来查看,也是在ni列表示了进程的优先级。
    进程的优先级可以在程序运行的时候设置,也可以在程序运行过程中动态的修改。
    运 行的时候设置进程的优先级可以使用nice命令,比如要使得top命令运行时候的优先级是5而不是默认的0,则可以使用nice -n 5 top,来使得top命令运行在5的优先级别。如果top命令已经在运行,则有两个办法可以动态的调整进程的级别。可以在top中输入r命令,然后按照提 示输入top命令对应的进程号,再按照提示输入要调整到哪个级别。另一个方法是使用renice命令,帮助如下:
    [oracle@rac1 ~]$ renice --help
    usage: renice priority [ [ -p ] pids ] [ [ -g ] pgrps ] [ [ -u ] users ]
    此 命令使用也很简单,可以调整单个进程,一个用户或者一个组的所有进程的优先级。示例如下:renice +10 -u oracle,此命令把oracle用户的所有进程的优先级全部调为10,包括新创建的和已经在运行的oracle用户的所有进程。此处的+10并不是表 示在现有级别上再往上调整10个级别,而是调整到正10的级别,所以多次运行此命令,进程的优先级不会再发生变化,将一直停留在+10级别。

    注意:如果不是root权限,则侄只能降调度优先级而不能提高,即使是自己用户的进程,自己把它调高了后,优先级也不能再被调会原来的值了,除非使用root用户来调回去。
    系统重启后,对进程优先级的调整全部失效,所有进程的调度回到默认的初始级别。

    展开全文

空空如也

空空如也

1 2 3
收藏数 53
精华内容 21
关键字:

linuxtop修改进程优先级

linux 订阅