linux社区爱心援助Linux认证系列教程业界动态站务新闻公司招聘建议留言网址大全LPI专题CISCO专题
设为首页
加入收藏
管理团队
JSP  
JAVA  
PERL  
 您的位置:首页 > 专题栏目 > LPI >
栏目导栏
  LPI
  cisco
资料搜索
热门文章
·LPI 101认证学习1-硬件和体系结
· LPI 101认证学习7-Linux安装与
·LPI 101认证学习26-X Window 系
·LPI 101认证学习8-Linux安装与
·LPI 101认证学习15-GNU和UNIX命
·LPI 101认证学习28-X Window 系
·LPI 101认证学习10-Linux安装与
·LPI 101认证学习11-GNU和UNIX命
·LPI 101&102 2007年考试大纲
·LPI 101认证学习18-设备、Linu
·LPI 101认证学习27-X Window 系
·LPI 101认证学习14-GNU和UNIX命
·LPI 101认证学习12-GNU和UNIX命
·LPI考试流程
· LPI 101认证学习9-Linux安装与
最新文章
·LPI 101&102 2007年考试大纲
·LPI 302中文考试大纲
·LPI 301中文考试大纲
·LPIC-3认证考试内容最终确定
·LPI 101认证学习28-X Window 系
·LPI 101认证学习27-X Window 系
·LPI 101认证学习26-X Window 系
·LPI 101认证学习25-设备、Linu
·LPI 101认证学习24-设备、Linu
·LPI 101 学习指南:一.安装网络
·LPI 101 学习指南:一.安装 本地
· 安装光盘介绍(The Installati
·LPI 101认证学习23-设备、Linu
·LinuxWorld上海开展 LPI与众多
·LPI 和 Canonical 联合发布Ubu
Google
 
LPI 101认证学习16-GNU和UNIX命令之修改进程执行优先级
[ 作者:  加入时间:2006-11-28 14:08:21  来自:Linux联盟 ]

本节讨论初级管理(LPIC-1)考试 101 的主题 1.103.6 的内容。这个主题的权值是 3 

在本节中,学习以下主题: 

  • 进程执行优先级

  • 设置优先级

  • 修改优先级

优先级

在前一节中我们看到,与大多数现代操作系统一样,Linux 可以运行多个进程。为此,Linux 会在进程之间分享 CPU 和其他资源。如果某些进程可以使用 100% CPU,那么别的进程就可能没反应了。在前一节中查看 进程状态 时,我们看到 top 命令的默认输出按照 CPU 使用情况的降序列出进程。如果对我们的简单时钟脚本运行 top 命令,这个进程可能进不了这个列表,因为这个进程在大多数时候不使用 CPU 

系统上可能有许多需要大量使用 CPU 的命令。例如,视频编辑工具以及在不同图像类型或不同声音编码之间进行转换(比如从 mp3 ogg)的程序。 

我们将创建一个小脚本,它只是使用 CPU,不做有意义的事儿。这个脚本有两个输入,一个计数值和一个标签。它打印标签以及当前日期和时间,然后递减计数值直至为 0,然后再打印标签和日期。这个脚本没有错误检查,也不很健壮,但是它可以帮助我们说明概念。 

CXvLinux联盟
清单 100. CPU 密集型脚本

 

                                      

[ian@echidna ian]$ echo 'x="$1"'>count1.sh

[ian@echidna ian]$ echo 'echo "$2" $(date)'>>count1.sh

[ian@echidna ian]$ CXvLinux联盟
echo 'while [ $x -gt 0 ]; do let x=$x-1;done'>>count1.sh

[ian@echidna ian]$ echo 'echo "$2" $(date)'>>count1.sh

[ian@echidna ian]$ cat count1.sh

x="$1"

echo "$2" $(date)

while [ $x -gt 0 ]; do let x=$x-1;done

echo "$2" $(date)

 

如果在您自己的系统上运行这个脚本,可能会看到清单 101 所示的输出。这个脚本要使用大量 CPU。如果您不是使用自己的工作站,那么在运行这个脚本之前要确定使用大量 CPU 不会对别人造成不良影响。 

CXvLinux联盟
清单 101. 运行 count1.sh

 

                                      

[ian@echidna ian]$ sh count1.sh 10000 A

A Mon Nov 14 07:14:04 EST 2005

A Mon Nov 14 07:14:05 EST 2005

[ian@echidna ian]$ sh count1.sh 99000 A

A Mon Nov 14 07:14:26 EST 2005

A Mon Nov 14 07:14:32 EST 2005

 

到目前为止,还算好。现在使用在本教程中学到的知识创建一个命令列表,从而在后台运行这个脚本,并启动 top 命令来查看这个脚本使用多少 CPU。命令列表如清单 102 所示,top 的输出见清单 103 

CXvLinux联盟
清单 102. 运行 count1.sh top

 

                                      

[ian@echidna ian]$ (sh count1.sh 99000 A&);top

CXvLinux联盟
CXvLinux联盟
清单 103. 使用了大量 CPU

 

                                      

  7:20am  up 48 days, 20:54,  2 users,  load average: 0.05, 0.05, 0.00

91 processes: 88 sleeping, 3 running, 0 zombie, 0 stopped

CPU states:  0.1% user,  0.0% system,  0.0% nice,  0.9% idle

Mem:  1030268K av, 1002864K used,   27404K free,       0K shrd,  240336K buff

Swap: 1052216K av,  118500K used,  933716K free                  605152K cached

 

  PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND

 8684 ian       20   0  1044 1044   932 R    98.4  0.1   0:01 sh

 

不坏啊。我们用一个简单的脚本就占用了 98.4% CPU 

显示和设置优先级

如果有这样的作业长期运行,那么可能发现它会干扰我们(或其他用户)在系统上进行其他工作的能力。Linux UNIX 系统使用一个优先级系统,共有 40 个优先级,范围从 -20(最高优先级)到 19(最低优先级)。 

nice

由一般用户启动的进程的优先级常常是 0nice 命令显示默认优先级。ps 命令也可以显示优先级(nice NI 级别),例如使用 -l 选项。清单 104 显示这种信息,其中突出显示了 nice 0 

CXvLinux联盟
清单 104. 显示优先级信息

 

                                      

[ian@echidna ian]$ nice

0

[ian@echidna ian]$ ps -l

  F S   UID   PID  PPID  C PRI  NI ADDR    SZ WCHAN  TTY          TIME CMD

000 S   500  7283  7282  0  70   0    -  1103 wait4  pts/2    00:00:00 bash

000 R   500  9578  7283  0  72   0    -   784 -      pts/2    00:00:00 ps

 

nice 命令还可以用于以不同优先级启动进程。用 -n(或 --adjustment)选项和一个负值来提高优先级,用正值来降低优先级。记住,具有最低优先级值的进程以最高的调度优先级运行。所以可以认为提高优先级值就是对其他进程更谦让。注意,常常需要具有超级用户(根用户)身份才能指定负的优先级调整值。换句话说,一般用户常常只能让他们的进程更谦让。在清单 105 中,在后台以不同的调度优先级运行 count1.sh 脚本的两个副本。注意,这两个进程的完成时间相差 5 秒。尝试使用不同的 nice 值,或者对第一个进程而不是对第二个进程进行优先级调整,从而体会不同情况的效果。 

CXvLinux联盟
清单 105. 使用 nice 设置优先级

 

                                      

[ian@echidna ian]$ (sh count1.sh 99000 A&);\

> (nice -n 19 sh count1.sh 99000 B&);\

> sleep 2;ps -l;sleep 20

B Mon Nov 14 08:17:36 EST 2005

A Mon Nov 14 08:17:36 EST 2005

  F S   UID   PID  PPID  C PRI  NI ADDR    SZ WCHAN  TTY          TIME CMD

000 S   500  7283  7282  0  70   0    -  1104 wait4  pts/2    00:00:00 bash

000 R   500 10765     1 84  80   0    -  1033 -      pts/2    00:00:01 sh

000 R   500 10767     1 14  79  19    -  1033 -      pts/2    00:00:00 sh

000 R   500 10771  7283  0  72   0    -   784 -      pts/2    00:00:00 ps

A Mon Nov 14 08:17:43 EST 2005

B Mon Nov 14 08:17:48 EST 2005

 

注意,与 nohup 命令一样,不能将命令列表或管道用作 nice 的参数。 

修改优先级

renice

如果启动了一个进程并意识到它应该以不同的优先级运行,那么也有办法在进程启动之后修改它的优先级,也就是使用 renice 命令。为要修改的进程指定绝对的优先级(而不是调整值),如清单 106 所示。 

CXvLinux联盟
清单 106. 使用 renice 修改优先级

 

                                      

[ian@echidna ian]$ sh count1.sh 299000 A&

[1] 11322

[ian@echidna ian]$ A Mon Nov 14 08:30:29 EST 2005

 

[ian@echidna ian]$ renice +1  11322;ps -l

11322: old priority 0, new priority 1

  F S   UID   PID  PPID  C PRI  NI ADDR    SZ WCHAN  TTY          TIME CMD

000 S   500  7283  7282  0  75   0    -  1104 wait4  pts/2    00:00:00 bash

000 R   500 11322  7283 96  77   1    -  1032 -      pts/2    00:00:11 sh

000 R   500 11331  7283  0  76   0    -   786 -      pts/2    00:00:00 ps

[ian@echidna ian]$ renice +3  11322;ps -l

11322: old priority 1, new priority 3

  F S   UID   PID  PPID  C PRI  NI ADDR  SZ WCHAN  TTY  TIME CMD

000 S   500  7283  7282  0  75   0  -  1104 wait4  pts/2  00:00:00 bash

000 R   500 11322  7283 93  76   3    -  1032 -    pts/2  00:00:16 sh

000 R   500 11339  7283  0  76   0    -   785 -    pts/2  00:00:00 ps

 

可以在手册页中找到关于 nice  renice 的更多信息。 Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论

评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·LPI 101认证学习17-GNU和UNIX命令之用正则表达式进行搜索  (2006-11-29 13:15:41)
 ·LPI 101认证学习15-GNU和UNIX命令之创建、监视和杀死进程  (2006-11-27 11:55:34)
 ·LPI 101认证学习14-GNU和UNIX命令之流、管道和重定向  (2006-11-24 11:51:52)
 ·LPI 101认证学习13-GNU和UNIX命令之执行基本的文件管理  (2006-11-23 12:11:21)
 ·LPI 101认证学习12-GNU和UNIX命令之文本流和过滤器  (2006-11-22 12:37:44)
 ·LPI 101认证学习11-GNU和UNIX命令之在命令行上进行操作  (2006-11-21 14:13:42)
 ·LPI 101认证学习10-Linux安装与包管理之RPM包管理  (2006-11-20 13:28:50)
 · LPI 101认证学习9-Linux安装与包管理之Debian 包管理  (2006-11-17 15:36:46)
 ·LPI 101认证学习8-Linux安装与包管理之管理共享库  (2006-11-16 15:00:44)
 · LPI 101认证学习7-Linux安装与包管理之构建和安装程序  (2006-11-15 20:55:48)