天天看点

linuxIPC——进程执行的优先级

<p><span style="font-size: medium;"><a name="N10094"></a>

</span>

<span style="font-size: medium;">本文深入介绍基础的 Linux 进程管理技术。您将学习如何:</span>

</p>

<ul>

<li>

<span style="font-size: medium;">理解进程优先级</span>

</li>

<li>

<span style="font-size: medium;">设置进程优先级</span>

</li>

<li>

<span style="font-size: medium;">更改进程优先级</span>

</li>

</ul>

<p><span style="font-size: medium;">本文帮助您准备 Linux Professional Institute's Junior Level Administration (LPIC-1) 考试

101 的 103 主题下的 103.6 考核目标。该考核目标的权值为 2。</span>

</p>

<p><span style="font-size: medium;"><a name="N100AB"><span class="smalltitle">先决条件</span>

</a>

</span>

</p>

<p><span style="font-size: medium;">为了从本文获得最大的收益,您应该具备基础的 Linux 知识,并且具有一个能够正常运行的 Linux

系统,以便练习本文讨论的命令。不同版本的程序输出的结果的格式可能不同,因此您的结果可能与本文图片和清单所示的结果有所不同。本文的例子显示的结果来

自于 Ubuntu 9.10 (Karmic Koala) 发行版。本文以上一篇文章 “<a href="http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-103-5/" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >学习 Linux,101:创建、监控和终止进程</a>

” 为基础。</span>

</p>

<div class="ibm-alternate-rule">

<hr>

</div>

<p><span style="font-size: medium;"><a name="3-priority"><span class="atitle">了解优先级</span>

</a>

</span>

</p>

<div class="ibm-container ibm-alt-header dw-container-sidebar">

<h2>

<span style="font-size: medium;">联系 Ian</span>

</h2>

<div class="ibm-container-body">

<span style="font-size: medium;">

Ian 是我们最受欢迎并且很多产的作者之一。查看 <a href="https://www.ibm.com/developerworks/mydeveloperworks/profiles/user/ishields" target="_blank" rel="external nofollow" >Ian 的个人资料</a>

并与他和 My developerWorks 上的其他作者和读者联系。</span>

</div>

</div>

<p><span style="font-size: medium;">Linux 与其他现代操作系统一样,也可以运行多个进程。它在多个进程之间共享 CPU 和其他资源。如果一个进程占用了 100% 的 CPU,那么其他进程将无法响应。</span>

</p>

<p><span style="font-size: medium;">如果运行 <code>top</code>

命令,默认将按照 CPU 使用量的降序显示进程,如清单 1 所示。在上一篇文章 “<a href="http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-103-5/" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >学习 Linux,101:创建、监控和终止进程</a>

” 中,我们展示了一个简易的数字时钟脚本,它每 30 秒在控制台打印,其他时间不执行任何操作。如果我们运行该进程,它可以不会出现在 <code>top</code>

的输出列表上,因为该进程大部分时间不使用 CPU。</span>

</p>

<p>

<span style="font-size: medium;"><br><a name="N100DE"><strong>清单 1. Linux 工作站上 top 命令的典型输出</strong>

</a>

<br></span>

</p>

<table style="width: 100%;" cellspacing="0" cellpadding="0"><tbody><tr>

<td class="code-outline">

<pre class="displaycode"><span style="font-size: medium;">

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

</span>

</pre>

</td>

</tr></tbody></table>

<p><span style="font-size: medium;"><br></span>

</p>

<p><span style="font-size: medium;">您的系统可能有很多命令都会占用大量 CPU。比如视频编辑工具、转换不同图片格式的程序或者音频编码转换程序(如将 mp3 转换为 ogg)等。</span>

</p>

<p><span style="font-size: medium;">如果您只有一个 CPU 或者 CPU 的数量有限,那么必须决定如何在几个计算进程之间共享这些有限的 CPU 资源。通常的做法是,选择一个要执行的进程,并让它在短时间内运行(这个时间称为<em>时间片</em>

),或者一直运行到它需要等待的一些事件,如要完成的 IO 等。为了确保重要的进程能够得到 CPU,这种选择是基于<em>调度优先级</em>

进程的。清单 1 中的 <strong>NI</strong>

列展示了调度优先级或者说每个进程的 <em>niceness</em>

。niceness 的范围一般从 -20

到 19,-20 表示调度优先级最高,19 表示优先级最低。</span>

</p>

<p><span style="font-size: medium;"><a name="N100F6"><span class="smalltitle">使用 ps 查看 niceness</span>

</a>

</span>

</p>

<p><span style="font-size: medium;">除了 <code>top</code>

命令之外,您还可以使用 <code>ps</code>

命令显示 niceness 值。您可以按照从文章 “<a href="http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-103-5/" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" >学习 Linux,101:创建、监控和终止进程</a>

” 中学到的方式自定义输出,也可以使用 <code>-l</code>

选项获取长清单。<code>ps-l</code>

的结果如清单 2 所示。如果使用 <code>top</code>

命令,请在 <strong>NI</strong>

列中查看 niceness 值。</span>

</p>

<p>

<span style="font-size: medium;"><br><a name="N1011F"><strong>清单 2. 使用 ps 查看 niceness</strong>

</a>

<br></span>

</p>

<table style="width: 100%;" cellspacing="0" cellpadding="0"><tbody><tr>

<td class="code-outline">

<pre class="displaycode"><span style="font-size: medium;">

[email protected]:~$ <strong>ps -l</strong>

</span>

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

</pre>

</td>

</tr></tbody></table>

<p><span style="font-size: medium;"><br></span>

</p>

<p><span style="font-size: medium;"><a name="N10128"><span class="smalltitle">niceness 的默认值</span>

</a>

</span>

</p>

<p><span style="font-size: medium;">从清单 1 和清单 2 中我们可以猜测出,常规用户所启用进程的 niecess 的默认值是 0。在当前的 Linux 系统中通常是这样。您可以运行 <code>nice</code>

</span>

命令且不带任何参数,以此验证您的 shell 和系统中的该值,如清单 3 所示。</p>

<p>

<span style="font-size: medium;"><br><a name="N10137"><strong>清单 3. 查看默认 niceness</strong>

</a>

<br></span>

</p>

<table style="width: 100%;" cellspacing="0" cellpadding="0"><tbody><tr>

<td class="code-outline">

<pre class="displaycode"><span style="font-size: medium;">

[email protected]:~$ <strong>nice</strong>

</span>

</pre>

</td>

</tr></tbody></table>

<p><span style="font-size: medium;"><br></span>

</p>

<div class="ibm-alternate-rule">

<hr>

</div>

<p><span style="font-size: medium;"><a name="7-priorityset"><span class="atitle">设置优先级</span>

</a>

</span>

</p>

<p><span style="font-size: medium;">在查看如何设置或更改 niceness 值之前,我们先构建一个 CPU 密集型小脚本,演示 niceness 的工作方式。</span>

</p>

<p><span style="font-size: medium;"><a name="N10148"><span class="smalltitle">CPU 密集型脚本</span>

</a>

</span>

</p>

<p><span style="font-size: medium;">我们将创建一个小脚本,它占用较多的

CPU,但执行的操作很简单。该脚本有两个输入:计数和标签。它打印标签以及当前的日期和时间,然后旋转,递减计数,直到它到达

0,最后再次打印标签和日期。该脚本如清单 4 所示,它没有任何错误检查机制,也不是非常稳定,但是它足以满足我们的演示需要。</span>

</p>

<p>

<span style="font-size: medium;"><br><a name="N10153"><strong>清单 4. CPU 密集型脚本</strong>

</a>

<br></span>

</p>

<table style="width: 100%;" cellspacing="0" cellpadding="0"><tbody><tr>

<td class="code-outline">

<pre class="displaycode"><span style="font-size: medium;">

[email protected]:~$ <strong>echo 'x="$1"'>count1.sh</strong>

<strong>echo 'echo "$2" $(date)'>>count1.sh</strong>

<strong>echo 'while [ $x -gt 0 ]; do x=$(( x-1 ));done'>>count1.sh</strong>

</span>

[email protected]:~$

[email protected]:~$

[email protected]:~$ echo 'echo "$2" $(date)'>>count1.sh

[email protected]:~$ cat count1.sh

x="$1"

echo "$2" $(date)

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

echo "$2" $(date)

</pre>

</td>

</tr></tbody></table>

<p><span style="font-size: medium;"><br></span>

</p>

<p><span style="font-size: medium;">如果在系统上运行该脚本,它的输出将类似于清单 5。您可能需要增加计数值以查看时间的不同,具体取决于您系统的速度。该脚本将占用大量

CPU,等会我们就会看到这一点。如果您的默认 shell 不是

Bash,如果您的脚本无法运行,那么可以使用下文所示的第二种调用形式。如果您使用的不是自己的工作站,运行脚本前请确保占用大量 CPU

不会导致不良影响。</span>

</p>

<p>

<span style="font-size: medium;"><br><a name="N10168"><strong>清单 5. 运行 count1.sh</strong>

</a>

<br></span>

</p>

<table style="width: 100%;" cellspacing="0" cellpadding="0"><tbody><tr>

<td class="code-outline">

<pre class="displaycode"><span style="font-size: medium;">

[email protected]:~$ sh count1.sh 10000 A

A Wed Jan 20 08:34:16 EST 2010

A Wed Jan 20 08:34:16 EST 2010

[email protected]:~$ bash count1.sh 99000 A

A Wed Jan 20 08:34:20 EST 2010

A Wed Jan 20 08:34:22 EST 2010

</span>

</pre>

</td>

</tr></tbody></table>

<p><span style="font-size: medium;"><br></span>

</p>

<p><span style="font-size: medium;">到目前为止一切顺利。现在让我们创建一个在后台运行的脚本,并启动 <code>top</code>

命令查看脚本所用 CPU 的命令清单(请参见之前的文章 “<a href="http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-103-1/" target="_blank" rel="external nofollow" >学习 Linux,101:Linux 命令行</a>

” 了解最新的命令清单)。命令清单如清单 6 所示,<code>top</code>

的输出见清单 7。</span>

</p>

<p>

<span style="font-size: medium;"><br><a name="N10180"><strong>清单 6. 运行 count1.sh 和 top</strong>

</a>

<br></span>

</p>

<table style="width: 100%;" cellspacing="0" cellpadding="0"><tbody><tr>

<td class="code-outline">

<pre class="displaycode"><span style="font-size: medium;">

[email protected]:~$ <strong>(sh count1.sh 5000000 A&);top</strong>

</span>

</pre>

</td>

</tr></tbody></table>

<p><span style="font-size: medium;"><br><br><a name="N1018C"><strong>清单 7. 占用大量 CPU</strong>

</a>

</span>

<span style="font-size: medium;"><br></span>

</p>

<table style="width: 100%;" cellspacing="0" cellpadding="0"><tbody><tr>

<td class="code-outline">

<pre class="displaycode"><span style="font-size: medium;">

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

</span>

</pre>

</td>

</tr></tbody></table>

<p><span style="font-size: medium;"><br></span>

</p>

<p><span style="font-size: medium;">不错。我们只使用了一个简单的脚本就占用了系统中一个 CPU 100% 的资源。如果希望占用多个 CPU,您可以在命令清单中添加对 <code>count1.sh</code>

的调用。如果运行过类似的作业,您会发现我们将无法在系统上执行其他工作(其他用户也是如此)。</span>

</p>

<p><span style="font-size: medium;"><a name="N10199"><span class="smalltitle">使用 nice 设置优先级</span>

</a>

</span>

</p>

<p><span style="font-size: medium;">现在我们可以让 CPU 持续忙碌一段时间,我们了解如何设置进程的优先级。目前我们学到的内容总结如下:</span>

</p>

<ul>

<li>

<span style="font-size: medium;">Linux 和 UNIX® 系统使用有 40 个优先级的优先级系统,范围从 -20(最高优先级)到 19(最低优先级)。</span>

</li>

<li>

<span style="font-size: medium;">常规用户启动的进程优先级一般是 0。</span>

</li>

<li>

<span style="font-size: medium;"><code>ps</code>

命令可以使用 <code>-l</code>

选项显示优先级(例如,nice 或 NI、level)。</span>

</li>

<li>

<span style="font-size: medium;"><code>nice</code>

命令显示我们的默认优先级。</span>

</li>

</ul>

<p><span style="font-size: medium;"><code>nice</code>

命令还可以用来启动具有不同优先级的进程。使用 <code>-n</code>

或 (<code>--adjustment</code>

) 选项时带一个负值可以增加优先级值,带一个正值将减少优先级值。记住,具有最低优先级值的进程运行时有最高调度优先级,因此可以这样记忆,增加优先级值对于其他进程而言更<em>好(nice)</em>

。注意,您必须是超级用户(根用户)才能调低优先级值。换句话说,常规用户通常只能增加它们的优先级值。</span>

</p>

<p><span style="font-size: medium;">为了演示如何使用 <code>nice</code>

设置优先级,首先同时在不同的 subshell 中启动两个 <code>count1.sh</code>

脚本的副本,但是将其中一个的 nice 值设置为最大值 19。一会儿之后,我们使用 <code>ps-l</code>

显示进程状态,包括 niceness。最后,我们添加任意 30 秒的休眠时间,确保两个 subshell 完成之后命令序列完成。这样一来,我们在等待输出时不会得到新的提示。结果如清单 8 所示。</span>

</p>

<p>

<span style="font-size: medium;"><br><a name="N101E2"><strong>清单 8. 使用 nice 设置一对进程的优先级</strong>

</a>

<br></span>

</p>

<table style="width: 100%;" cellspacing="0" cellpadding="0"><tbody><tr>

<td class="code-outline">

<pre class="displaycode"><span style="font-size: medium;">

[email protected]:~$ <strong>(sh count1.sh 2000000 A&);(nice -n 19 sh count1.sh 2000000 B&);/</strong>

<strong>sleep 1;ps -l;sleep 10</strong>

</span>

>

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

</pre>

</td>

</tr></tbody></table>

<p><span style="font-size: medium;"><br></span>

</p>

<p><span style="font-size: medium;">您对两个作业同时完成感到奇怪吗?我们的优先级设置怎么了?记住,脚本占用了<strong>一个</strong>

CPU。这个系统运行在 AMD Athlon™ 7750 双核处理器上,它的负载很轻,每个内核运行一个进程,不需要进行优化。</span>

</p>

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

</p>

<p>

<span style="font-size: medium;"><br><a name="N101FC"><strong>清单 9. 使用 nice 设置 4 个进程的属性</strong>

</a>

<br></span>

</p>

<table style="width: 100%;" cellspacing="0" cellpadding="0"><tbody><tr>

<td class="code-outline">

<pre class="displaycode"><span style="font-size: medium;">

[email protected]:~$ <strong>(sh count1.sh 5000000 A&);(nice -n 6 sh count1.sh 5000000 B&);/</strong>

<strong>(nice -n 12 sh count1.sh 5000000 C&);(nice -n 18 sh count1.sh 5000000 D&);/</strong>

<strong>sleep 1;ps -l;sleep 30</strong>

</span>

>

>

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

</pre>

</td>

</tr></tbody></table>

<p><span style="font-size: medium;"><br></span>

</p>

<p><span style="font-size: medium;">使用 4 个不同的优先级我们发现,每个作业按照优先级顺序完成。请自行尝试不同的 nice 值演示各种可能的情况。</span>

</p>

<p><span style="font-size: medium;">使用 <code>nice</code>

启动进程最后要注意的一点是:使用 <code>nohup</code>

命令时,不能使用命令清单或管道作为 <code>nice</code>

的参数。 </span>

</p>

<div class="ibm-alternate-rule">

<hr>

</div>

<p><span style="font-size: medium;"><a name="7-prioritychange"><span class="atitle">更改优先级</span>

</a>

</span>

</p>

<p><span style="font-size: medium;"><a name="N10222"><span class="smalltitle">renice</span>

</a>

</span>

</p>

<p><span style="font-size: medium;">如果您正好启动了一个进程,但意识到它应该以不同的优先级运行,那么有一种方法可以在启动之后对其进行更改,即使用 <code>renice</code>

命令。您可以为进程指定一个绝对优先级(不是调整值),进程的更改如清单 10 所示。</span>

</p>

<p>

<span style="font-size: medium;"><br><a name="N10231"><strong>清单 10. 使用 renice 更改优先级</strong>

</a>

<br></span>

</p>

<table style="width: 100%;" cellspacing="0" cellpadding="0"><tbody><tr>

<td class="code-outline">

<pre class="displaycode"><span style="font-size: medium;">

[email protected]:~$ <strong>sh count1.sh 10000000 A&</strong>

</span>

[1] 1537

[email protected]:~$ 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

[email protected]:~$ 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

</pre>

</td>

</tr></tbody></table>

<p><span style="font-size: medium;"><br></span>

</p>

<p><span style="font-size: medium;">记住,您必须是超级用户才能为进程指定更高的调度优先级,或者说让它们的 nice 值更低。</span>

</p>

<p><span style="font-size: medium;">您可以在手册上找到有关 <code>nice</code>

<code>renice</code>

的更多信息。</span>

</p>

<p>

<span style="font-size: medium;"><br></span>

</p>

<p><span style="font-size: medium;"><a name="resources"><span class="atitle">参考资料 </span>

</a>

</span>

</p>

<p><span style="font-size: medium;"><strong>学习</strong>

</span>

</p>

<ul>

<li>

<span style="font-size: medium;">使用

<a href="http://www.ibm.com/developerworks/cn/linux/l-lpic1-v3-map/" target="_blank" rel="external nofollow" >学习 Linux,101:LPIC-1 路线图</a>

找到相关的 developerWorks 文章,它们能够帮助您准备基于 2009 年 4 月的考核目标的 LPIC-1 认证考试。<br><br></span>

</li>

<li>

<span style="font-size: medium;">在 <a href="http://www.lpi.org/eng/certification/the_lpic_program" target="_blank" rel="external nofollow" >LPIC

Program</a>

站点上可以找到针对 Linux Professional Institute's Linux 系统管理认证的三个级别的详细考核目标、任务列表和样例问题。尤其要查看针对 <a href="http://www.lpi.org/eng/certification/the_lpic_program/lpic_1/exam_101_detailed_objectives" target="_blank" rel="external nofollow" >LPI 考试 101</a>

<a href="http://www.lpi.org/eng/certification/the_lpic_program/lpic_1/exam_102_detailed_objectives" target="_blank" rel="external nofollow" >LPI 考试 102</a>

的 2009 年 4 月份考核目标。要经常查看 LPIC Program 站点了解最新的考核目标。<br><br></span>

</li>

<li>

<span style="font-size: medium;">在 developerWorks 上查看完整的

<a href="http://www.ibm.com/developerworks/cn/linux/lpi/index.html" target="_blank" rel="external nofollow" >LPI 考试准备系列</a>

,学习 Linux 基础知识并根据 2009 年 4 月份之前的 LPI 考试目标准备系统管理员认证考试。<br><br></span>

</li>

<li>

<span style="font-size: medium;">在 “<a href="http://www.ibm.com/developerworks/cn/linux/l-sek51-basics/" target="_blank" rel="external nofollow" >Linux 开发新手基本任务</a>

”(developerWorks,2005 年 3 月)中了解如何打开终端窗口或 shell 提示符等。

<br><br></span>

</li>

<li>

<span style="font-size: medium;"><a href="http://www.tldp.org/" target="_blank" rel="external nofollow" >Linux

文档项目</a>

提供各种有用的文档,尤其是它的 HOWTO 文档。<br><br></span>

</li>

<li>

<span style="font-size: medium;"> 在 <a href="http://www.ibm.com/developerworks/cn/linux/" target="_blank" rel="external nofollow" > developerWorks Linux 专区</a>

寻找为 Linux 开发人员(包括 <a href="http://www.ibm.com/developerworks/cn/linux/newto/" target="_blank" rel="external nofollow" >Linux 新手入门</a>

)准备的更多参考资料,查阅我们 <a href="http://www.ibm.com/developerworks/cn/linux/best2009/index.html" target="_blank" rel="external nofollow" >最受欢迎的文章和教程</a>

。 <br><br></span>

</li>

<li>

<span style="font-size: medium;">在 developerWorks 上查阅所有 <a href="http://www.ibm.com/developerworks/cn/views/linux/libraryview.jsp?search_by=Linux+%E6%8A%80%E5%B7%A7" target="_blank" rel="external nofollow" > Linux 技巧</a>

和 <a href="http://www.ibm.com/developerworks/cn/views/linux/libraryview.jsp?type_by=%E6%95%99%E7%A8%8B" target="_blank" rel="external nofollow" > Linux 教程</a>

。 <br><br></span>

</li>

<li>

<span style="font-size: medium;">随时关注 developerWorks <a href="http://www.ibm.com/developerworks/cn/offers/techbriefings/" target="_blank" rel="external nofollow" >技术活动</a>

和<a href="http://www.ibm.com/developerworks/cn/swi/" target="_blank" rel="external nofollow" >网络广播</a>

。 <br></span>

</li>

</ul>

继续阅读