B.1 安装X的提示
.尽快地获得所有文件的拷贝,理想的状况是在开始安装系统之前(你可
以自行将磁带上所包含的档案列印出来,或是由附录E所列的供应商订
购一份。)
.首先,对已有的建构档案尽量少做更动,如果你是第一次安装X,我们
强力推荐你使用预设的目录来安装那些系统的各个不同的部份,只有在
有确实需要更动目录名称时,才考虑重新安装。(如果你不如此做,当
有些问题发生时,你将无法知道,它真的是一个问题或你只是安装时犯
了一个小错误而已)
.如果你是用这次发行的版本建立一个标准的系统,你几乎不需要做任何
更动便可完成安装 -- 建构档已正确地被设定。(本版发行的备忘录对
此有一点误导,你可能会得到一个错误的印象,以为不论你使用什麽系
统,均需作大量的更动。)
.当你开始安装,对大多数的系统而言,你不需明确指定系统的型态,它
的建立是根据C语言的前处理器(preprocessor)来定义系统名称而自动
找到。
.在你熟悉core版之前不要安装contrib 软体,因为它安装费时,且易产
生问题,当你熟悉系统之後,你可能总会修改一些建构参数。
.如果你真的需要使用不同预设值的建构,阅读文件
$TOP/util/imake.includes/README 可得到关於如何更动的资讯。(它
也对工具程式imake 给了一个概观,imake 是一般Unix系统中make的前
端(front_end) ,用以建立系统)。
B.2 建立本发行版
在本次发行的软体分为两类:一部份核心软体由X协会标准所提供,另一
部份则任何人都有可能提供,要使得核心软体这一部份能在大多数的地方重新
建构、建立和安装需极大的努力,而那些使用者贡献的部份,也就是说,未经
X协会标准编译和测试的部份只能自行逐一建立,在util/scripts中的ximake.sh
可能对从Imakefiles到建立Makefiles 非常有用。
几乎所有在核心软体中的makefiles 均自动地由名叫imake 的公用程式所
产生,所有的Makefiles 初始版本均包含了在哪些地方不能使用imake (无疑
地,在特定的机器上需要修正)。在许多系统,X必需以正确的磁带方能建立。
无论如何,它可以藉简单的设定目录util/imake.includes/中的档案site.def
和*.macros中之参数,来重新建构。
B.2.1 安装摘要
欲载入(load)和安装此次发行的X Window System你将需要:
1. 读完本次发行的备忘录。
2. 建一个你读入磁带的目录(通常名称类似/usr/local/src/X或/src/R31)
你将需要大约30 megabytes给核心软体,和超过80 megabytes给使用
者贡献软体。
3. 从步骤2 卸下核心软体磁带,既然使用者贡献软体必须自行建立,你
可以等到以後载入,每一卷磁带含有一个非常大的Unix的tar 档案,
以每英□1600位元方式储存。
4. 阅读档案util/imake.includes/README以了解如何建构你的特定X系
统。同样地,确定你依照目录server/ddx/ 中README档案来计画建造
你的server。
5. 如果你计画在一部以上的机器编译这个版本并且要有一个分类档案系
统,你可能希望依照util/scripts/lndir.sh 的说明来建立符号连接
树在每一个目的机器,它允许所有的机器如你所希望的使用X而分享
一组原始程式,在这种情况下,build tree这个名词被用来当作你编
译目录树的参考(和含有实际档案的source tree 有所区别)。
6. 如果你是在A/UX 1.0下建立在 Macintosh之上,确定你是自目录
server/ddx/macII执行R3 setup.sh 。它从util/cpp中的公益(public
domain) 原始码建立一个C的前处理器,和修正一些放错位置的系统
档案。如果你是在一部SUN 上,确定你在档案
util/imake.includes/Sun.macros的顶端设定了四个OS的参数。如此
作可防止在不同的SunOS 编译器下的错误。如果你是在Apollo上建立,
确定你是使用9.7.1 或更後面版本的C编译器,否则,server将无法
正确地编译。
7. 确定你已遵循所有和机器特性有关的指示,且imake 也是依你的机器
而建构。(看source tree 中util/imake.includes/Imake.tmpl顶端
的#ifdefs 区段(blocks))。
8. 当你完成了建构,你可以准备建立core版,注意那些在
util/imake.includes/应用到你的系统的.macros 档案。它们在接近
顶端有一行设定一个make的变数名称为BOOTSTRAPCFLAGS 。如果这个
变数值是空白,你可以用下列的命令开始建立:
% make World > & make.world &
如果不是空白,你必须将此定义附加到命令列上。这可用imake 对所
有的编译器设定特定的cpp 符号。(如果你在不同的系统安装,见
util/imake/imake.c)在所有的core版提供的macro 档案中,只有
A/UX需要这个旗标:
% make BOOTSTRAPCFLAGS=-DmacII World >& make.world &
不要用输出档make.log当作make clean藉著make World移去此名称的
所有档。这将导致重建所有的Makefiles 和执行make -k all 来编译
core版中所有的东西。这将依你的机器不同,花掉2 至12小时。
9. 当make完成後,检讨log 是否有任何问题。必须要没有严重的问题,
A/UX的使用者可以忽略有关列举型态不调和(enumeration type
clashes)的编译警告,Applo 的使用者可以忽略最佳化的警告。
10.如果你对一切均感到满足且建立正确程序,测试一些不同的程式(如
server, xterm, xinit, etc)。你也许需要在根目录执行 server或
xterm ,如果你执行上有问题,第二部的工作站或终端机将很有用。
11.对你旧版的Xheader file, binaries, fonts, libraries 等作备份。
12.到build tree顶端并键入
% make install >& make.install
你将不是在根目录做便是在熟悉的目录写入存取(看Imakefile 最上
阶层和util/imake.includes/Imake.tmpl)。xterm 程式在大多数的
系统必需安装setuid到根目录,xload 程式必需安装setguid 到那些
属於/dev/kmem 的档案。
13.如果你要安装指南页,在build tree顶端键入
% make install.man
14.如果你要建立和安装lint libraries,在build tree的顶端输入:
% make install.ln
如果你是第一次安装X,你可能也需要作以下的步骤。检查一下在
server/ddx目录中不同的README档案中附加的指示。
15.加入装置驱动器或重新建构你的核心(kernel)。
16.建立附加的虚拟终端机(pseudo terminals)。查看你的操作系统说明
/dev/MAKEDEV和问你的系统管理者细节部份。
17.阅读有关新的显示管理器xdm 的指南页,这个程式提供了一个可携的
自动执行X的方法,和许多为了初学者所建立非常好的介面符号。这
取代了原先自/etc/init 执行的终端机模拟器xterm 。
18.确定所有的X11 的使用者在他们的搜寻路径中均为BINDIR的目录(通
常为/usr/bin/X11)。
B.2.2 操作系统需求
X受欢迎的理由之一为和操作系统无关。虽然我们讨论的□例均为在Unix
系统下,但有许多非Unix操作系统的制造厂商也提供X。本次发行的Server已
在下列系统建立:
4.3+tahoe
Ultrix 3.0 FT2(Ultrix 2.0)
SunOS 3.4
HP-UX 6.01
Apollo Domain/IX 9.7
IBM AOS 4.3
A/UX 1.0
如果你使用较早的版本,你可能招致一些麻烦,特别是,server将无法在
IBM 4.2A第二次发行版执行。在server/ddx/ 中不同的README档案描述了对编
译器、函数馆、前处理器等等的特定需求。例如前述的A/UX 1.0的使用者将需
要建立一个新版的C前处理器,而Apollo的使用者将需要9.7.1版的C编译器。
你应在使用X前先确定你的网路系统和相互通讯公用程式作用正常。如果
像talk和rlogin这样的程式无法工作,X大概也不行。
B.2.3 读取本发行版的磁带
本发行版可以用电子媒体的方式从DARPA 交换网路、UUNET 计画、一些谘
询公司和不同的UUCP的档案库。尤有进者,MIT 软体发行中心提供了一组2400
□的1600BPI 密度的磁带。(该中心不提供卡带或磁碟片)
每一卷MIT 的磁带包含有一个大的tar 目录结构,内含发行版一部份的软
体的原始码和文件。如果你受限於磁碟机的空间,你可以只下载core磁带,删
除任何你不需要的server,和产生一份使用者贡献磁带的目录以供以後查询,
所有的档案名称均以相对路径方式给定(在开头以一个点替代斜线),所以这
个发行版可放在你的档案系统的任何地方。
在读取磁带之前,确定你有足够的磁碟空间,以下为你对每卷磁带所需的
空间。
版名 内容 megabytes 情况
core servers,函数馆,公用程式 35 必需
contrib-1 程式,示□程式,字型 36 推荐使用
contrib-2 使用者贡献的工具 34 推荐使用
编译过的程式估计需要二分之一到三分之二原始码所占的空间,所以,光
是core版你便需要大约60 megabytes的磁碟空间。
建立一个目录用以放置所有的原始码,在此目录中,执行适当的作业系统
命令来读取core版磁带。如果你的机器预设tar 为读取1600 BPI的磁带,则你
键入的指令将类似:
% mkdir /usr/local/scr/X
% cd /usr/local/scr/X
% tar x
必要时可向你的系统管理者取得协助。
B.2.4 使用符号连结(Symbolic Link)
本发行版在处理使用连结(Symbolic由机器所支援)避免档案重覆(大多
的header file ),如果你在未提供建构档案情况下建立本发行版,你必须在
适当的util/imake.includes/*.macros档案检查LN建构参数。如果你的作业系
统不提供软体连结,LN需被设定为建立硬体连结(hard link) 或拷贝原始档。
如果你需要在建立後将本发行版移动到其它的机器,用tar 替代CP或rcp
以保留日期和连结,通常可用下列的命令达成:
% (chdir/usr/local/src/X;tar cf - .) | rsh othermachine "(chdir/moredisk/X; tar xpBf -)"
可向你的系统管理者获得协助。
B.2.5 建构本发行版
这个发行版广□使用 imake 公用程式, 它可从机器相关的 (machine-
independent)Imakefiles 产生机器特有的 (machine-specific) Makefiles.
另一个叫做 makedepend 的公用程式, 是用於产生C语言档案的 Makefile 相
关性 (dependencies). 假如你不在乎可携性 (portability), 虽然我们强烈地
鼓励你去使用imake 与 makedepend, 但是仍提供有样本 makefiles.
imake 的建构档被置於 util/imake.includes 目录. makefiles 是由一个
称做imake.tmpl 的模板 (template)档、一个机器特有的 .macros 档与一个
site 特有的 site.def 档所产生. 只有极少例外, 建构参数为 cpp 符号, 它可
以被定义於一个 per-server 基础上或在一个给定 site 里的所有 server. 模
板档案不应该被修改.
util/imale.includes/README 档案每一个建构参数以及它可以设定的值.
预设值的选择是考量可适用於多种机器且易於维护. site 特有的建构应在
sit.def 档案内使用下列语法描述 :
#ifndef BuildParameter
#define BuildParameter site-specific-value
#endif
B.2.6 编译本发行版
建构参数设定後, 你应该可以在构造树 (build tree) 的最上层利用下列
命令以编译core 软体 :
% make World > &make.world &
若在建立过程, 将 make.log 这个特殊档案删除, 则请不要将输出重导
(redirect) 到make.log。依照使用机器的不同, 这个步骤将花费 2 - 12 小
时, 且在大多数的机器上皆能顺利完成。
在所有 Makefiles 与相关性都建好之後, 你必须重新启动以便使你的构
造 (build) 发生作用, 请在构造树的最上层输入下列命令:
%make -k > &make.out &
假如你以後决定改变任何建构参数, 你将需要作另一个完整的 make World.
B.2.7 安装发行版
假如每一个编译皆成功, 你可以输入下列命令, 从建造树最上层安装软体:
# make install
假如你不想安装在根目录, 你必须建一些可写入的目录并从你的帐号
(account) 安装它们, 然後检查在 BINDIR 目录 (通常是 /USR/BIN/X11) 内
的 xterm 与 xload 的所有权(ownership) 与保护模式 (protection). xterm
必须安装 setuid 至根目录以便它能设定虚拟终端机与更新/etc/utmp. xload
需被 setuid 至根目录, 或 setgid 至拥有档案 /dev/kmem 的目录以使它们
可以取得系统的平均负载.
假如你的 /etc/termcap 与 /user/lib/terminfo 资料库没有 xterm 的
入口 (entry),可参考在 client/xterm 目录内的样本入口. System V 的使用
者将需要用 tic公用程式编译 terminfo 入口.
假如你计划使用 xinit 程式去执行X, 你可能会想产生一个将指名的X
指到适当server 程式的连结 (link) (通常的名称像 /usr/bin/x11/ 目录里
的 Xmachine). 然而,xinit 不打算给初学者使用; 取而代之, site 管理者被
期望能使用 xdm 或提供友善的使用介面.
假如你想安装指南页, 请检查在 util/imake.includes/ 里的
MamDirectoryRoot、ManDir 与 LibManDir 三个建构参数, 并在构造树的最上
层输入:
# make install.man
假如你喜欢建立与安装 lint 程式库, 在构造树的最上层输入下列命令:
# make install.ln
最後, 确定所有使用者在它们的 PATH 环境变数都有 BINDIR (通常是
/usr/bin/x11/).
B.2.8 kernel 与特殊档案的注意事项
在某些机器上, 如果有一个新的装置驱动器则必须重建 kernel 或至少经
过重新建构, 假如你以前从未执行X且使用一个没有列在这些注意事项内的系
统, 你可能需要确定在你的 kernel 建构档案里的 csr位址能与你的硬体相匹
配. 另外, 你应该确定在系统启动时 kernel 会自动建构显示器.
你可能需要为你的显示器、滑鼠或键盘建立特殊的装置. 例如:
# /etc/mknod/dev/bell c 12 2 # for bell on Sun
# MAKEDEV displays # for displays on the RT/PC
在显示器装置档上的保护模式应该被设定成只有 server 可以开启它. 假
如 server是以 /etc/init启动, 这个保护可以被根读/写, 任何其他的人不能
存取.
在一个 Digital QVSS (VAXstation II) 上, 你应该使用 adb 去确定
kernel 变数qv-def-scrn 被设定为 2, 以便使用 VR-260 监视器的整个宽度.
这可以藉著直接地改变/vmunix 或 /sys/vaxuba/qv.o 并重新连结与安装
kernel 来达成. 你将需要 reboot 使新值发生作用.
更详细的资料请看 Server/ddx/ 目录里对应的 README 档与指南页.
B.2.9 测试本发行版
即使你计划在所有时间都使用 xdm 执行X, 你也应该要从另一个终端机执
行它, 以便检查每个你所安装部份的是否已被安装且正常工作.
来自 server 的错误讯息将会显示在你的终端机, 而不是被写到
xdm-errors 或/usr/adm/X?msgs ('?' 是显示器的号码).
测试 server 最简单的方法是先进入 /usr/bin/x11 (或任何你已安装 X
程式的地方)然後执行 xinit, 如下:
% cd/usr/bin/X11
% xinit
你应该可以看到一个灰色的带状图样覆盖萤幕、一个形状像 "X" 的游标追
踪著指标以及一个终端机模拟视窗. 否则请按下列方式检查 :
1. 假如没有显示出灰色萤幕背景, 检查是否有在 server/ddx/ 子目录内的
README 里描述的任何特殊装置档案的许可 (通常是储存在 /dev/).
2. 假如背景出现, 但游标仍是白色方形. 请确定字型是否已安装 (特别是
usr/lib/X11/fonts/misc/ 里的字型 cursor.snf; 见建构参数
DefaultFontPath). 并确定在你的每一个字型目录都有一个档案叫做font.dir.
这个档案是由 mkfontdir 程式产生的, 被 server 用於找出一个目录里的字型.
3. 假如游标出现但不追踪指标, 请确定任何特定装置档案 (它的名称像
/dev/mouse) 已被安装 (见 server 的 README 档).
4. 假如 SERVER 启动且不久之後变成黑色, 表示启始的 client (xterm 或
xdm) 当掉了.请确定 xterm 安装於根目录并建立足够的虚拟终端机. 假
如你正执行 xinit, 且在你的home 目录一个有叫做 .xinitrc 的档案,
确定它是可执行的而且上一个它所启动的程式在前景执行 (亦即命令列尾
端没有一个 & 符号). 否则, .xinitrc 将立刻完成, 这也是 xinit 所
假设的以及你所想要的. 只要你有正确工作的初始视窗, 试著从 xterm 执
行其他的程式. 若想用 uwm 视窗管理器定位一个新视窗, 可在闪动的方框
出现时按下按钮 1 (通常在指标器的最左边按钮) :
% xlock -g 200x200-0+0 &
% uwm &
% xlogo &
% xeyes &
...
X现在可以被使用了, 研读一个新程式的指南页, 看看新字型, 你会从中
得到乐趣.
B.2.10 建立额外的虚拟终端机
因为每个 xterm 需要一个不同的虚拟终端机, 所以你应该建很多给它们
(在一个小型多使用者系统你可能至少要 32 个). 每个 ptr 有两个装置, 一
个主控 (master) 与一个从属(slave), 它们通常叫做 /dev/tty/[pqrstu][0-f]
与 /dev/pty[pqrstu][0-f]. 假如你没有最少的 "p" 与 "q" 列建构, 你应该
要求你的系统管理者加上它们. 这通常是以 /dev里执行的 MAKEDEV script来
完成:
# cd/dev
# ./MAKEDEV pty0
# ./MAKEDEV pty1
B.2.11 从 /etc/rc 启动X
本发行版提供一个可以从系统启动档 /etc/rc 执行X server 的新公用
程式叫做 xdm,它提供一个不同於从 /etc/init 执行X 的可携式与吸引人的
方式. 设计时考虑到可以很容易地裁剪以应不同工作站的需求, xdm 小心地
保持 server 的执行, 提示输入使用者名字与密码并管理使用者的session.
样本建构目前使用 shell script, 以提供相当简单的环境. 这也将是未来发
行版继续研究的地方.
xdm 弹性的关键是它广泛使用resource, 允许 site 管理者快速与容易地
测试不同的设定(setup). 当 xdm 启动, 它读入一个建构档 (预设是
/usr/lib/X11/xdm/xdm-config 但可以用命令列旗标指定-config) 列出不同的
资料档、预设参数以及启动与关机时会被执行的程式. 因为它使用标准的
Toolkit resource档案格式, 任何可以在 xdm-config 档设定的参数也可以在命
令列使用 -xrm 选项指定.
预设建构包含下面所列:
DisplayManager.servers: /use/lib/X11/Xservers
DisplayManager.errorLogFile: /use/lib/X11/Xdm-errors
DisplayManager*resources: /use/lib/X11/Xresources
DisplayManager*startup: /use/lib/X11/Xstartup
DisplayManager*session: /use/lib/X11/Xsession
DisplayManager*reset: /use/lib/X11/Xreset
server 档包含要启动的 server 列表. errorLogFile 是 xdm 输出被重
导的档案.resources 档包含 xdm Login 视窗预设的resource. 特别的地方是
特殊键的顺序可以被指定 (在 xlogin*login.translation resource), startup
档应该是一个程式或可执行的 script, 它可以在使用者打入合理的密码之後执行
. 它是一个作 site 特有的初始化, logging 等的圈套 (hook). session 入口是
用於启动使用环境的一个 session 管理程式或可执行script 的名称. 假如使用者
在他的 home 目录内没有一个可执行的 .xsession 档, 有一个简单的版本可提
供一个简单的 xterm 视窗与 uwm 视窗管理器. 最後, 在使用者 logout之後一
个 reset 程式或可执行的 script 会被执行. 使用预设建构执行 xdm, 加入下列
一行到你的 boot 档 (通常叫做 /etc/rc 或 /etc/rc.local) :
/usr/bin/X11/xdm &
毫无疑问地, 大多数的 site 想建立它们自己的建构. 我们建议你们将 site
特有的xdm-config 档与其它的 xdm 档放在不同的目录, 这样才不会被某些作
了一个 makeinstall 的人盖掉. 假如你将档案储存在 /usr/local/lib/xdm,
下面的命令可用於以启动xdm :
/usr/bin/X11/xdm -config /usr/local/lib/xdm-config &
许多 server 在假设它们是尝试读取键盘的唯一程式下, 将键盘设定成非
阻断式 I/O(non-blocking I/O). 不幸地, 某些 /etc/getty 的版本 (特别是
A/UX) 将立刻看到一个零长度读取的连续 stream, 因为将它解释成 EOF 档尾
指示. 最後 /etc/init 将取消login, 一直到某人打入下列命令:
# kill -HUP 1
在 A/UX 下, 一个变通的方法是禁止从控制台 login 且从 /etc/inittab 去
执行 xdm.然而, 请确定你存有一个旧的 /etc/inittab 拷贝以备你在出错状
况以及你必须从网路上或单使用者模式恢复 login 的时候使用.
另一个较少为人彻底研究的是如何设定一个帐号 (account), 它的 shell
是在client/xdm/里的 xdmshell 程式. 预设状况下这个程式不会被安装, 所以
site 管理者需要特别查看它是否符合需求. xdmshell 公用程式确定它执行於
适当的终端机型式、启动 xdm、等待它完成与重置控制台 (如果需要的话).假
如 xdm resource档包含一个终止-显示器 (abort-display) 动作的系结, 就像
下列命令 :
xlogin*login.translations: #override Ctrl<Key>R: abort-display()
然後在 xdm login 视窗按下指定键 (上例是 <Ctrl-R>) 控制台即可以被恢复.
xdmshell 程式通常安装在根目录, 但仅能被特殊群体的一份子执行, 如
此以 xdmshell作为 shell 的帐号 (account) 的人是唯一的一份子:
% grep xdm /etc/passwd
X:aB9i7vhDVa82z:101:51:Acount for starting up X: (contd.)
/tmp:/etc/xdmshell
% grep 51 /etc/group
xdmgrp:*:51:
% ls -g /etc/xdmshell
-rws--x--- 1 root xdmgrp 20338 Nov 1 01:32 /etc/xdmshell
假如 xdm resource不曾有一个键系结至 abort-display() 动作的建构,
一般使用者将没有方法可直接 login 到控制台. 至於是否需要则视个别的
site 而定.
B.2.12 支援老旧系统 -- 从 /etc/init 启动X
警告 : 下面所提供的适合较老的系统且在未来的发行版将不提供.
Ultrix 与 4.3bsd 使用 /etc/ttys 建构档的一个新的扩充格式, 它允许
你指定一个视窗系统与初始时被执行的程式. 虽然一般人比较喜欢使用 xdm,
但系统仍然提供可在 xterm里启动X与一个从 /etc/ttys 初始的 xterm 视窗.
建立 ttyv 终端机
因为大多数的 /etc/init 版本需要给每个 /etc/ttys 的入口一个真实终
端列, 所以你必须给每一个显示器指定一个虚拟终端机. 虽然正常状态下xterm
动态地配置一个 pty, 但是 -L 选项可以强迫它使用从 /etc/init 传过来的虚
拟终端机.
依照协议, 具有最高的 "小装置 (minor device) 号码" 被改名成
[pt]tyv0, 次高的被改为 [pt]tyv1, 依此类推. 最高的被改为最低的, 可使
他们不以正常从低至高的搜寻方法 (大多数程式配置一个 pty 的方法) 取得
. 在仅有 "p" 与 "q" 的小系统, 下面的命令可用以将两个显示器设定成"v"
终端机.
# cd /dev
# mv ttyqf ttyv0; mv ptyqf ptyv0
# mv ttyqe ttyv1; mv ptyqf ptyv1
见你的系统管理者可以获得帮助.
增加视窗进入口到 /etc/ttys
只要你已经改变虚拟终端机的名称, 你就能为它们在 /etc/ttys 增加入口
. 再次提醒这个仅对具有以新的 4.3bsd 格式启动视窗系统的系统, 不能用在
使用 4.2bsd 小进入口格式与 /etc/ttytype 的较老系统上. 假如你的系统没
有新的格式, 将 ttyv 的与 ptyv 的改为原名并跳到下一部分.
xserver 指南页里包含关於设定 /etc/ttys 进入口的更详细叙述. 通常
, ttyv 被置於档案的底部且类似下列:
ttyv0"/usr/bin/X11/xterm -L -grometry 80x24+0+0 -display :0" (contd.)
xterm off window="/usr/bin/X11/X :0"
注意, 它不像 X10, 给 X server 命令的 server 号码之引数必须在前面
置一个冒号. 额外的命令列选项可以在 xterm 命令列或X命令列指定. 然而,
许多 init 的版本具有相当小的程式名称缓冲区, 限制了入口的长度. 也有某
些版本不允许在入口里有 pound记号, 意谓著不能给任意数目的颜色指定, 这
也是为什麽会写 xdm 的原因.
只要你曾经增加或改变任何入口, 你必须送信号给 init, 告诉它重读 /etc/ttys
与重新启动. 在根目录下打入下列命令即可以达到这个目的:
# kill -HUP 1
这将会中止在重新启动前任何改变列上的任何存在的处理 (process), 所以它
应该仅能由系统管理者去执行.