服务器维护,服务器代维,安全设置,漏洞扫描,入侵检测服务

dirtysea 发表于 2014-4-11 16:49:57

进程执行优先级

<h2 id="3-priority" style="margin-top: 5px; margin-bottom: 5px; border: 0px; outline: 0px; vertical-align: baseline; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; color: rgb(0, 0, 0); font-size: 1.6em !important;">了解优先级</h2><h2 id="3-priority" style="margin-top: 5px; margin-bottom: 5px; border: 0px; outline: 0px; vertical-align: baseline; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; color: rgb(0, 0, 0); font-size: 1.6em !important;"><span style="color: rgb(34, 34, 34); font-family: Arial, sans-serif; font-size: 1.166em; line-height: 1.5em; font-weight: normal;">Linux 与其他现代操作系统一样,也可以运行多个进程。它在多个进程之间共享 CPU 和其他资源。如果一个进程占用了 100% 的 CPU,那么其他进程将无法响应。</span></h2><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; font-size: 1.166em !important;">如果运行&nbsp;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">top</code>&nbsp;命令,默认将按照 CPU 使用量的降序显示进程,如清单 1 所示。在上一篇文章 “<font color="#745285">学习 Linux,101:创建、监控和终止进程</font>” 中,我们展示了一个简易的数字时钟脚本,它每 30 秒在控制台打印,其他时间不执行任何操作。如果我们运行该进程,它可以不会出现在<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">top</code>&nbsp;的输出列表上,因为该进程大部分时间不使用 CPU。</p><h5 id="N1009B" style="margin-top: 5px; border: 0px; outline: 0px; vertical-align: baseline; color: rgb(0, 0, 0); font-family: Arial, sans-serif; font-size: 1.166em !important;">清单 1. Linux 工作站上 top 命令的典型输出</h5><div class="codesection" style="border: 0px; outline: 0px; font-size: 13px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(0, 0, 0); line-height: 15px;"><pre class="displaycode" style="border: 1px solid rgb(204, 204, 204); outline: 0px; font-size: 11px; vertical-align: baseline; width: 780px; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; overflow: auto; clear: right; margin-bottom: 6px !important; padding: 5px 10px 5px 3px !important; background-color: rgb(247, 247, 247) !important;">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      PRNIVIRTRESSHR S %CPU %MEM    TIME+COMMAND            
11220 ian       20   0555m 106m27m S    82.736:06.16 firefox            
    7 root      15-5   0    0    0 S    10.010:59.36 ksoftirqd/1      
10849 ian       20   0212m15m10m S    00.4   0:08.11 gnome-terminal   
    1 root      20   0 19584 1888 1196 S    00.0   0:00.83 init               
    2 root      15-5   0    0    0 S    00.0   0:00.01 kthreadd         
    3 root      RT-5   0    0    0 S    00.0   0:00.02 migration/0      
    4 root      15-5   0    0    0 S    00.0   0:01.08 ksoftirqd/0      
    5 root      RT-5   0    0    0 S    00.0   0:00.00 watchdog/0         
    6 root      RT-5   0    0    0 S    00.0   0:00.03 migration/1</pre></div><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; font-size: 1.166em !important;">您的系统可能有很多命令都会占用大量 CPU。比如视频编辑工具、转换不同图片格式的程序或者音频编码转换程序(如将 mp3 转换为 ogg)等。</p><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; font-size: 1.166em !important;">如果您只有一个 CPU 或者 CPU 的数量有限,那么必须决定如何在几个计算进程之间共享这些有限的 CPU 资源。通常的做法是,选择一个要执行的进程,并让它在短时间内运行(这个时间称为<em style="border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline;">时间片</em>),或者一直运行到它需要等待的一些事件,如要完成的 IO 等。为了确保重要的进程能够得到 CPU,这种选择是基于<em style="border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline;">调度优先级</em>&nbsp;进程的。清单 1 中的&nbsp;<strong style="border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline;">NI</strong>&nbsp;列展示了调度优先级或者说每个进程的&nbsp;<em style="border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline;">niceness</em>。niceness 的范围一般从 -20 到 19,-20 表示调度优先级最高,19 表示优先级最低。</p><h3 id="N100B0" style="margin-top: 5px; margin-bottom: 5px; border: 0px; outline: 0px; vertical-align: baseline; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; color: rgb(0, 0, 0); font-size: 1.4em !important;">使用 ps 查看 niceness</h3><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; margin-top: -2px !important; font-size: 1.166em !important;">除了&nbsp;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">top</code>&nbsp;命令之外,您还可以使用&nbsp;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">ps</code>&nbsp;命令显示 niceness 值。您可以按照从文章 “<font color="#745285">学习 Linux,101:创建、监控和终止进程</font>” 中学到的方式自定义输出,也可以使用&nbsp;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">-l</code>&nbsp;选项获取长清单。<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">ps&nbsp;-l</code>&nbsp;的结果如清单 2 所示。如果使用&nbsp;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">top</code>&nbsp;命令,请在&nbsp;<strong style="border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline;">NI</strong>&nbsp;列中查看 niceness 值。</p><h5 id="N100D1" style="margin-top: 5px; border: 0px; outline: 0px; vertical-align: baseline; color: rgb(0, 0, 0); font-family: Arial, sans-serif; font-size: 1.166em !important;">清单 2. 使用 ps 查看 niceness</h5><div class="codesection" style="border: 0px; outline: 0px; font-size: 13px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(0, 0, 0); line-height: 15px;"><pre class="displaycode" style="border: 1px solid rgb(204, 204, 204); outline: 0px; font-size: 11px; vertical-align: baseline; width: 780px; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; overflow: auto; clear: right; margin-bottom: 6px !important; padding: 5px 10px 5px 3px !important; background-color: rgb(247, 247, 247) !important;">ian@attic4:~$ <strong style="border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-family: Arial, sans-serif;">ps -l</strong>
F S   UID   PIDPPIDC PRINI ADDR SZ WCHANTTY          TIME CMD
0 S1000 26502 26501080   0 -5368 wait   pts/4    00:00:00 bash
0 R1000 27046 26502080   0 -1684 -      pts/4    00:00:00 ps</pre></div><h3 id="N100D9" style="margin-top: 5px; margin-bottom: 5px; border: 0px; outline: 0px; vertical-align: baseline; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; color: rgb(0, 0, 0); font-size: 1.4em !important;">niceness 的默认值</h3><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; margin-top: -2px !important; font-size: 1.166em !important;">从清单 1 和清单 2 中我们可以猜测出,常规用户所启用进程的 niecess 的默认值是 0。在当前的 Linux 系统中通常是这样。您可以运行&nbsp;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">nice</code>&nbsp;命令且不带任何参数,以此验证您的 shell 和系统中的该值,如清单 3 所示。</p><h5 id="N100E4" style="margin-top: 5px; border: 0px; outline: 0px; vertical-align: baseline; color: rgb(0, 0, 0); font-family: Arial, sans-serif; font-size: 1.166em !important;">清单 3. 查看默认 niceness</h5><div class="codesection" style="border: 0px; outline: 0px; font-size: 13px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(0, 0, 0); line-height: 15px;"><pre class="displaycode" style="border: 1px solid rgb(204, 204, 204); outline: 0px; font-size: 11px; vertical-align: baseline; width: 780px; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; overflow: auto; clear: right; margin-bottom: 6px !important; padding: 5px 10px 5px 3px !important; background-color: rgb(247, 247, 247) !important;">ian@attic4:~$ <strong style="border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-family: Arial, sans-serif;">nice</strong>
0</pre></div><div class="ibm-alternate-rule" style="margin-top: 10px; margin-bottom: 10px; border: 0px; outline: 0px; font-size: 13px; vertical-align: baseline; font-family: Arial, sans-serif; background-color: rgb(204, 204, 204); height: 1px; clear: both; color: rgb(0, 0, 0); line-height: 15px;"></div><p class="ibm-ind-link ibm-back-to-top" style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); clear: both; text-align: right; height: 22px; line-height: 1.5em; font-size: 1.166em !important;"><a href="http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-103-6/#ibm-pcon" class="ibm-anchor-up-link" style="padding-left: 16px; border-width: 0px; border-bottom-style: none; outline: 0px; font-size: inherit; vertical-align: baseline; color: rgb(116, 82, 133); opacity: 0.8; display: inline; text-decoration: none; line-height: 1.065em; font-weight: bold; background-image: url(&lt;img src=" http:="" 1.www.s81c.com="" i="" v17="" icons="" ibm_sprite_arrow_blue_on.png"="" border="0" alt="">) !important; background-position: 0px -401px; background-repeat: no-repeat no-repeat;"&gt;回页首</a></p><h2 id="7-priorityset" style="margin-top: 5px; margin-bottom: 5px; border: 0px; outline: 0px; vertical-align: baseline; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; color: rgb(0, 0, 0); font-size: 1.6em !important;">设置优先级</h2><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; margin-top: 5px !important; font-size: 1.166em !important;">在查看如何设置或更改 niceness 值之前,我们先构建一个 CPU 密集型小脚本,演示 niceness 的工作方式。</p><h3 id="N100F2" style="margin-top: 5px; margin-bottom: 5px; border: 0px; outline: 0px; vertical-align: baseline; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; color: rgb(0, 0, 0); font-size: 1.4em !important;">CPU 密集型脚本</h3><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; margin-top: -2px !important; font-size: 1.166em !important;">我们将创建一个小脚本,它占用较多的 CPU,但执行的操作很简单。该脚本有两个输入:计数和标签。它打印标签以及当前的日期和时间,然后旋转,递减计数,直到它到达 0,最后再次打印标签和日期。该脚本如清单 4 所示,它没有任何错误检查机制,也不是非常稳定,但是它足以满足我们的演示需要。</p><h5 id="N100FA" style="margin-top: 5px; border: 0px; outline: 0px; vertical-align: baseline; color: rgb(0, 0, 0); font-family: Arial, sans-serif; font-size: 1.166em !important;">清单 4. CPU 密集型脚本</h5><div class="codesection" style="border: 0px; outline: 0px; font-size: 13px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(0, 0, 0); line-height: 15px;"><pre class="displaycode" style="border: 1px solid rgb(204, 204, 204); outline: 0px; font-size: 11px; vertical-align: baseline; width: 780px; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; overflow: auto; clear: right; margin-bottom: 6px !important; padding: 5px 10px 5px 3px !important; background-color: rgb(247, 247, 247) !important;">ian@attic4:~$ <strong style="border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-family: Arial, sans-serif;">echo 'x="$1"'&gt;count1.sh</strong>
ian@attic4:~$ <strong style="border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-family: Arial, sans-serif;">echo 'echo "$2" $(date)'&gt;&gt;count1.sh</strong>
ian@attic4:~$ <strong style="border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-family: Arial, sans-serif;">echo 'while [ $x -gt 0 ]; do x=$(( x-1 ));done'&gt;&gt;count1.sh</strong>
ian@attic4:~$ echo 'echo "$2" $(date)'&gt;&gt;count1.sh
ian@attic4:~$ cat count1.sh
x="$1"
echo "$2" $(date)
while [ $x -gt 0 ]; do x=$(( x-1 ));done
echo "$2" $(date)</pre></div><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; font-size: 1.166em !important;">如果在系统上运行该脚本,它的输出将类似于清单 5。您可能需要增加计数值以查看时间的不同,具体取决于您系统的速度。该脚本将占用大量 CPU,等会我们就会看到这一点。如果您的默认 shell 不是 Bash,如果您的脚本无法运行,那么可以使用下文所示的第二种调用形式。如果您使用的不是自己的工作站,运行脚本前请确保占用大量 CPU 不会导致不良影响。</p><h5 id="N1010C" style="margin-top: 5px; border: 0px; outline: 0px; vertical-align: baseline; color: rgb(0, 0, 0); font-family: Arial, sans-serif; font-size: 1.166em !important;">清单 5. 运行 count1.sh</h5><div class="codesection" style="border: 0px; outline: 0px; font-size: 13px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(0, 0, 0); line-height: 15px;"><pre class="displaycode" style="border: 1px solid rgb(204, 204, 204); outline: 0px; font-size: 11px; vertical-align: baseline; width: 780px; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; overflow: auto; clear: right; margin-bottom: 6px !important; padding: 5px 10px 5px 3px !important; background-color: rgb(247, 247, 247) !important;">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</pre></div><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; font-size: 1.166em !important;">到目前为止一切顺利。现在让我们创建一个在后台运行的脚本,并启动&nbsp;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">top</code>&nbsp;命令查看脚本所用 CPU 的命令清单(请参见之前的文章 “<font color="#745285">学习 Linux,101:Linux 命令行</font>” 了解最新的命令清单)。命令清单如清单 6 所示,<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">top</code>&nbsp;的输出见清单 7。</p><h5 id="N1011F" style="margin-top: 5px; border: 0px; outline: 0px; vertical-align: baseline; color: rgb(0, 0, 0); font-family: Arial, sans-serif; font-size: 1.166em !important;">清单 6. 运行 count1.sh 和 top</h5><div class="codesection" style="border: 0px; outline: 0px; font-size: 13px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(0, 0, 0); line-height: 15px;"><pre class="displaycode" style="border: 1px solid rgb(204, 204, 204); outline: 0px; font-size: 11px; vertical-align: baseline; width: 780px; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; overflow: auto; clear: right; margin-bottom: 6px !important; padding: 5px 10px 5px 3px !important; background-color: rgb(247, 247, 247) !important;">ian@attic4:~$ <strong style="border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-family: Arial, sans-serif;">(sh count1.sh 5000000 A&amp;);top</strong></pre></div><h5 id="N10128" style="margin-top: 5px; border: 0px; outline: 0px; vertical-align: baseline; color: rgb(0, 0, 0); font-family: Arial, sans-serif; font-size: 1.166em !important;">清单 7. 占用大量 CPU</h5><div class="codesection" style="border: 0px; outline: 0px; font-size: 13px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(0, 0, 0); line-height: 15px;"><pre class="displaycode" style="border: 1px solid rgb(204, 204, 204); outline: 0px; font-size: 11px; vertical-align: baseline; width: 780px; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; overflow: auto; clear: right; margin-bottom: 6px !important; padding: 5px 10px 5px 3px !important; background-color: rgb(247, 247, 247) !important;">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      PRNIVIRTRESSHR S %CPU %MEM    TIME+COMMAND
26756 ian       20   04004588496 R1000.0   0:03.53 sh
11220 ian       20   0555m 101m27m S    52.657:58.07 firefox
26757 ian       20   0 19132 1364980 R    00.0   0:00.03 top
    1 root      20   0 19584 1888 1196 S    00.0   0:00.89 init
    2 root      15-5   0    0    0 S    00.0   0:00.01 kthreadd</pre></div><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; font-size: 1.166em !important;">不错。我们只使用了一个简单的脚本就占用了系统中一个 CPU 100% 的资源。如果希望占用多个 CPU,您可以在命令清单中添加对<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">count1.sh</code>&nbsp;的调用。如果运行过类似的作业,您会发现我们将无法在系统上执行其他工作(其他用户也是如此)。</p><h3 id="N10132" style="margin-top: 5px; margin-bottom: 5px; border: 0px; outline: 0px; vertical-align: baseline; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; color: rgb(0, 0, 0); font-size: 1.4em !important;">使用 nice 设置优先级</h3><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; margin-top: -2px !important; font-size: 1.166em !important;">现在我们可以让 CPU 持续忙碌一段时间,我们了解如何设置进程的优先级。目前我们学到的内容总结如下:</p><ul class="ibm-bullet-list" style="border: 0px; outline: 0px; font-size: 1.166em; vertical-align: baseline; list-style: none; padding-bottom: 8px; color: rgb(51, 51, 51); line-height: 1.5em; font-family: Arial, sans-serif;"><li style="margin-left: 0px; padding-top: 5px; padding-bottom: 5px; padding-left: 11px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; background-image: url(&lt;img src=" http:="" 1.www.s81c.com="" i="" v17="" bullets="" ibm_lg_bullet_grey_on.gif"="" border="0" alt="">); height: 22px; clear: left; background-position: 0px 13px; background-repeat: no-repeat no-repeat;"&gt;Linux 和 UNIX® 系统使用有 40 个优先级的优先级系统,范围从 -20(最高优先级)到 19(最低优先级)。</li><li style="margin-left: 0px; padding-top: 5px; padding-bottom: 5px; padding-left: 11px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; background-image: url(&lt;img src=" http:="" 1.www.s81c.com="" i="" v17="" bullets="" ibm_lg_bullet_grey_on.gif"="" border="0" alt="">); height: 22px; clear: left; background-position: 0px 13px; background-repeat: no-repeat no-repeat;"&gt;常规用户启动的进程优先级一般是 0。</li><li style="margin-left: 0px; padding-top: 5px; padding-bottom: 5px; padding-left: 11px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; background-image: url(&lt;img src=" http:="" 1.www.s81c.com="" i="" v17="" bullets="" ibm_lg_bullet_grey_on.gif"="" border="0" alt="">); height: 23px; clear: left; background-position: 0px 13px; background-repeat: no-repeat no-repeat;"&gt;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">ps</code>&nbsp;命令可以使用&nbsp;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">-l</code>&nbsp;选项显示优先级(例如,nice 或 NI、level)。</li><li style="margin-left: 0px; padding-top: 5px; padding-bottom: 5px; padding-left: 11px; border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; background-image: url(&lt;img src=" http:="" 1.www.s81c.com="" i="" v17="" bullets="" ibm_lg_bullet_grey_on.gif"="" border="0" alt="">); height: 23px; clear: left; background-position: 0px 13px; background-repeat: no-repeat no-repeat;"&gt;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">nice</code>&nbsp;命令显示我们的默认优先级。</li></ul><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; font-size: 1.166em !important;"><code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">nice</code>&nbsp;命令还可以用来启动具有不同优先级的进程。使用&nbsp;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">-n</code>&nbsp;或 (<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">--adjustment</code>) 选项时带一个负值可以增加优先级值,带一个正值将减少优先级值。记住,具有最低优先级值的进程运行时有最高调度优先级,因此可以这样记忆,增加优先级值对于其他进程而言更<em style="border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline;">好(nice)</em>。注意,您必须是超级用户(根用户)才能调低优先级值。换句话说,常规用户通常只能增加它们的优先级值。</p><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; font-size: 1.166em !important;">为了演示如何使用&nbsp;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">nice</code>&nbsp;设置优先级,首先同时在不同的 subshell 中启动两个&nbsp;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">count1.sh</code>&nbsp;脚本的副本,但是将其中一个的 nice 值设置为最大值 19。一会儿之后,我们使用&nbsp;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">ps&nbsp;-l</code>&nbsp;显示进程状态,包括 niceness。最后,我们添加任意 30 秒的休眠时间,确保两个 subshell 完成之后命令序列完成。这样一来,我们在等待输出时不会得到新的提示。结果如清单 8 所示。</p><h5 id="N10167" style="margin-top: 5px; border: 0px; outline: 0px; vertical-align: baseline; color: rgb(0, 0, 0); font-family: Arial, sans-serif; font-size: 1.166em !important;">清单 8. 使用 nice 设置一对进程的优先级</h5><div class="codesection" style="border: 0px; outline: 0px; font-size: 13px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(0, 0, 0); line-height: 15px;"><pre class="displaycode" style="border: 1px solid rgb(204, 204, 204); outline: 0px; font-size: 11px; vertical-align: baseline; width: 780px; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; overflow: auto; clear: right; margin-bottom: 6px !important; padding: 5px 10px 5px 3px !important; background-color: rgb(247, 247, 247) !important;">ian@attic4:~$ <strong style="border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-family: Arial, sans-serif;">(sh count1.sh 2000000 A&amp;);(nice -n 19 sh count1.sh 2000000 B&amp;);\</strong>
&gt; <strong style="border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-family: Arial, sans-serif;">sleep 1;ps -l;sleep 10</strong>
A Thu Jan 21 14:38:39 EST 2010
B Thu Jan 21 14:38:39 EST 2010
F S   UID   PIDPPIDC PRINI ADDR SZ WCHANTTY          TIME CMD
0 R1000   946   1 9980   0 -1001 -      pts/3    00:00:01 sh
0 R1000   948   1 999919 -1001 -      pts/3    00:00:01 sh
0 R1000   952 32408080   0 -1684 -      pts/3    00:00:00 ps
0 S1000 32408 32407080   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</pre></div><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; font-size: 1.166em !important;">您对两个作业同时完成感到奇怪吗?我们的优先级设置怎么了?记住,脚本占用了<strong style="border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline;">一个</strong>&nbsp;CPU。这个系统运行在 AMD Athlon™ 7750 双核处理器上,它的负载很轻,每个内核运行一个进程,不需要进行优化。</p><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; font-size: 1.166em !important;">那么,让我们使用 4 个不同的 niceness 水平(0、6、12、18)启动 4 个进程查看会发生什么情况。我们将增加每个进程的忙碌计数参数使之运行的时间更长一些。查看清单 9 之前,请根据您了解的内容,预期一下会发生什么情况。</p><h5 id="N1017D" style="margin-top: 5px; border: 0px; outline: 0px; vertical-align: baseline; color: rgb(0, 0, 0); font-family: Arial, sans-serif; font-size: 1.166em !important;">清单 9. 使用 nice 设置 4 个进程的属性</h5><div class="codesection" style="border: 0px; outline: 0px; font-size: 13px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(0, 0, 0); line-height: 15px;"><pre class="displaycode" style="border: 1px solid rgb(204, 204, 204); outline: 0px; font-size: 11px; vertical-align: baseline; width: 780px; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; overflow: auto; clear: right; margin-bottom: 6px !important; padding: 5px 10px 5px 3px !important; background-color: rgb(247, 247, 247) !important;">ian@attic4:~$ <strong style="border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-family: Arial, sans-serif;">(sh count1.sh 5000000 A&amp;);(nice -n 6 sh count1.sh 5000000 B&amp;);\</strong>
&gt; <strong style="border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-family: Arial, sans-serif;">(nice -n 12 sh count1.sh 5000000 C&amp;);(nice -n 18 sh count1.sh 5000000 D&amp;);\</strong>
&gt; <strong style="border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-family: Arial, sans-serif;">sleep 1;ps -l;sleep 30</strong>
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   PIDPPIDC PRINI ADDR SZ WCHANTTY          TIME CMD
0 R10001422   1 9480   0 -1001 -      pts/3    00:00:00 sh
0 R10001424   1 4286   6 -1001 -      pts/3    00:00:00 sh
0 R10001427   1 569212 -1001 -      pts/3    00:00:00 sh
0 R10001431   1 149818 -1001 -      pts/3    00:00:00 sh
0 R10001435 32408080   0 -1684 -      pts/3    00:00:00 ps
0 S1000 32408 32407080   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</pre></div><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; font-size: 1.166em !important;">使用 4 个不同的优先级我们发现,每个作业按照优先级顺序完成。请自行尝试不同的 nice 值演示各种可能的情况。</p><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; font-size: 1.166em !important;">使用&nbsp;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">nice</code>&nbsp;启动进程最后要注意的一点是:使用&nbsp;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">nohup</code>&nbsp;命令时,不能使用命令清单或管道作为&nbsp;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">nice</code>&nbsp;的参数。</p><div class="ibm-alternate-rule" style="margin-top: 10px; margin-bottom: 10px; border: 0px; outline: 0px; font-size: 13px; vertical-align: baseline; font-family: Arial, sans-serif; background-color: rgb(204, 204, 204); height: 1px; clear: both; color: rgb(0, 0, 0); line-height: 15px;"></div><p class="ibm-ind-link ibm-back-to-top" style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); clear: both; text-align: right; height: 22px; line-height: 1.5em; font-size: 1.166em !important;"><a href="http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-103-6/#ibm-pcon" class="ibm-anchor-up-link" style="padding-left: 16px; border-width: 0px; border-bottom-style: none; outline: 0px; font-size: inherit; vertical-align: baseline; color: rgb(116, 82, 133); opacity: 0.8; display: inline; text-decoration: none; line-height: 1.065em; font-weight: bold; background-image: url(&lt;img src=" http:="" 1.www.s81c.com="" i="" v17="" icons="" ibm_sprite_arrow_blue_on.png"="" border="0" alt="">) !important; background-position: 0px -401px; background-repeat: no-repeat no-repeat;"&gt;回页首</a></p><h2 id="7-prioritychange" style="margin-top: 5px; margin-bottom: 5px; border: 0px; outline: 0px; vertical-align: baseline; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; color: rgb(0, 0, 0); font-size: 1.6em !important;">更改优先级</h2><h3 id="N1019C" style="margin-top: 5px; margin-bottom: 5px; border: 0px; outline: 0px; vertical-align: baseline; font-family: HelveticaNeue-Light, 'Helvetica Neue Light', 'Helvetica Neue', Helvetica, Arial; color: rgb(0, 0, 0); font-size: 1.4em !important;">renice</h3><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; margin-top: -2px !important; font-size: 1.166em !important;">如果您正好启动了一个进程,但意识到它应该以不同的优先级运行,那么有一种方法可以在启动之后对其进行更改,即使用&nbsp;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">renice</code>&nbsp;命令。您可以为进程指定一个绝对优先级(不是调整值),进程的更改如清单 10 所示。</p><h5 id="N101A7" style="margin-top: 5px; border: 0px; outline: 0px; vertical-align: baseline; color: rgb(0, 0, 0); font-family: Arial, sans-serif; font-size: 1.166em !important;">清单 10. 使用 renice 更改优先级</h5><div class="codesection" style="border: 0px; outline: 0px; font-size: 13px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(0, 0, 0); line-height: 15px;"><pre class="displaycode" style="border: 1px solid rgb(204, 204, 204); outline: 0px; font-size: 11px; vertical-align: baseline; width: 780px; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; overflow: auto; clear: right; margin-bottom: 6px !important; padding: 5px 10px 5px 3px !important; background-color: rgb(247, 247, 247) !important;">ian@attic4:~$ <strong style="border: 0px; outline: 0px; font-size: inherit; vertical-align: baseline; font-family: Arial, sans-serif;">sh count1.sh 10000000 A&amp;</strong>
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   PIDPPIDC PRINI ADDR SZ WCHANTTY      TIME CMD
0 R10001537 32408 9981   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   PIDPPIDC PRINI ADDR SZ WCHANTTY      TIME CMD
0 R10001537 32408 9983   3 -1001 -      pts/3      0:18 sh count1.sh 100</pre></div><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; font-size: 1.166em !important;">记住,您必须是超级用户才能为进程指定更高的调度优先级,或者说让它们的 nice 值更低。</p><p style="padding-top: 6px; padding-bottom: 6px; border: 0px; outline: 0px; vertical-align: baseline; font-family: Arial, sans-serif; color: rgb(34, 34, 34); line-height: 1.5em; font-size: 1.166em !important;">您可以在手册上找到有关&nbsp;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">nice</code>&nbsp;和&nbsp;<code style="border: 0px; outline: 0px; vertical-align: baseline; font-family: 'Andale Mono', 'Lucida Console', Monaco, Liberation, fixed, monospace; line-height: 1.5em; font-size: 0.95em !important; color: rgb(0, 0, 0) !important;">renice</code>&nbsp;的更多信息。</p>
页: [1]
查看完整版本: 进程执行优先级