分类: BSD
2007-01-13 17:13:36
在类unix系统中,信号是进程之间非常重要的一种通信方式,在操作系统上也为我们提供了操作信号的用户接口(即命令行方式)。kill命令,如你所想的那样,该命令是用来“杀死”进程的,但是这只是该命令执行结果的表现。那么,实质是什么呢?其实,kill命令是向由你指定的进程发送“杀死”这一信号的即SIGKILL。
“有两个信号可以停止进程:SIGTERM 和 SIGKILL。 SIGTERM比较友好,进程能捕捉这个信号,根据您的需要来关闭程序。在关闭程序之前,您可以结束打开的记录文件和完成正在做的任务。在某些情况下, 假如进程正在进行作业而且不能中断,那么进程可以忽略这个 SIGTERM信号。
对于SIGKILL信号,进程是不能忽略的。 这是一个 '“我不管您在做什么,立刻停止”'的信号。 假如您发送SIGKILL信号给进程, FreeBSD就将进程停止在那里。
您可能会去使用 SIGHUP、 SIGUSR1 和 SIGUSR2信号。 这都是些通用的信号,各种应用程序都可以应用在各方面的信号发送。
假如您改变了web系统的配置文件──并想web系统去重读它的配置,您可以停止然后再启动httpd。但这样做web系统会导致一个短暂的中断周期,那样是不受欢迎的。几乎所有的守护进程在编写时,都会指定对SIGHUP 信号进行响应从而重读配置文件。 所以, 最好的方法,就不是杀死并重启 httpd, 而是发一个 SIGHUP 信号给它。因为在这方面没有一个标准,不同的守护进程有不同的用法,所以不了解时应读一下守护进程的文档。”
所以,kill命令的实质就是向进程发送信号,就如上面所说一样,当我们修改了守护进程的配置文件而又要求其重新加载时,我们不需要重启计算机,不需要杀死服务在重新启动它,我们只需要使用kill命令向该守护进程发送SIGHUP信号即可:
kill -HUP 守护进程pid
这样该守护进程就会重新读取配置文件。