FreeBSD handbook中文版 3 Unix 基础( 五 )


SIGKILL 无法被进程忽略 。它会发出这样的信号“I do not care what you are doing,
stop right now” 。如果你发送SIGKILL 给一个进程,FreeBSD 将会停止那个进程 。
你可能要用到的其他signal 是SIGHUP, SIGUSR1 和SIGUSR2 。这些是普通用途的
signal 。当他们被发送时,不同的应用程序将做不同的事情 。
建议你改变一下你的web 服务器的配置文件----你最好告诉web 服务器重新读一下它
的配置文件 。你需要重起httpd,但这将会在你的web 服务器上增加一些消耗,而这可能是
你不太欢迎的 。绝大多数守护程序通过重新读取它们的配置文件来对SIGHUP 信号作出回应 。
不同的后台程序将有不同的行为 。所以,要带着问题来阅读守护程序的联机手册 。
可以使用kill 命令来发送signal,例如:
发送一个signal 给处理器
这个例子显示了如何发送一个信号给inetd 。Inetd 的配置文件是/etc/inetd.conf 。当它
接收到SIGHUP 时,inetd 将重新读取这个配置文件 。
寻找你要发送信号的进程ID 。可以使用ps,grep 命令 。Grep 命令被用来搜索输出,1.
寻找你要指定的字符 。这个可以有一个普通用户来执行,而inetd 需要是root 用户,所以
ps 必须带上ax 选项
% ps -ax | grep inetd
198 ?? IWs 0:00.00 inetd -wW
这儿,inetd 的PID 是198 。有时,grep inetd 命令也需要出现在这个输出中 。这是
因为ps 必须要找到当前运行的进程的列表 。
使用kill 来发送信号 。因为inetd 只有root 用户才能运行,你必须使用su 来变2.
成一个root 用户 。
% su
PassWord:
第10 页FreeBSD 使用手册
# /bin/kill -s HUP 198
就象普通的unix 命令一样,如果它成功执行,kill 将不会输出任何信息 。如果你想发
送一个signal 给一个进程,你会看到“kill: PID: Operation not permitted” 。如果你
打错了PID,你有可能把信号发错给了某个进程,这样会很糟糕,也有可能把信号发给了一
个当前不在使用的PID,你将可能看到“kill: PID: No such process”这样的信息 。
为什么使用/bin/kill:许多shell 提供了内建命令kill;shell 将直接发送信号,比
运行/bin/kill 要好 。这点非常有用,但不同的shell 需要用不同的语法来指定信号的名字 。
重要点:在系统中随意地杀死进程是个坏主意 。特别地,init 进程ID 是1,非常特殊 。
运行/bin/kill -s KILL 1 是一个快速关闭你系统的方法 。在你键入kill 之前,请你仔细
检查你执行的kill 的参数 。
3.7 Shell
在FreeBSD 中,许多工作是通过一个叫命令解释器{俗称“外壳(shell)”}的命令行
接口来完成的 。shell 的主要工作是接收输入的命令然后执行它们 。许多shell 也能够用来
帮助完成每天的工作,如:文件管理,文件查找,命令行编辑,宏命令,以及其它环境设置 。
FreeBSD 有许多种shell,如:sh,Bourne Shell 和csh,C-shell 。许多其它的shell,如
tcsh,bash 拥有更强大的功能,你可以在FreeBSD 的软件包中找到 。
你使用哪个shell?那还正是个问题 。如果你是一个C 程序员,你可能觉得象tcsh 这
种C 类型的shell,用起来比较舒服 。如果你使用Linux 或你是一个UNIX 的新手,你可能
会试一试bash 。这里要指出的是每一种shell 都有它自己的特点,你可以根据你的喜好自
由地选择 。Shell 的一个基本特征是文件名的自动补充功能 。通常在你输入一个命令或文件
名时,你先输入几个字母,然后按TAB 键,命令或文件名会自动补上剩下的字母 。例如:我
有两个文件:foobar 和foo.bar 。我要删除foo.bar 。所以我就输入:rm foo[TAB].[TAB] 。
Shell 就会打出rm foo[BEEP].Bar 。[BEEP]是铃声 。它能够告诉我,因为匹配的问题shell

推荐阅读