freebsd 信号和杀死进程

当您运行一个编辑器时它是很容易控制的,告诉它去加载文件它就加载 。您之所以能这样做,是因为编辑器提供这样便利去这样做,和因为有编辑器去附上的终端 。一些程序在运行中不需要连续的用户输入,一有机会就从终端里分离到后台去 。例如,一个web系统整天都在作web请求的响应,他不需要您输入任何东西就能完成,这个类别的另一个例子就是把email的传送 。我们把那些程序叫守护进程 。守护神是希腊神话中的一些人物,非正非邪,他们是些守护小幽灵,大体上为人类作出贡献 。许多类似web系统或mail系统的系统对于今天仍有用途,这就是为什么在那么长的时间里,BSD的吉祥物保持为一双鞋加一把钢叉的守护神模样 。
守护进程的程序命名通常在最后加一个“d” 。BIND是伯克莱互联网络守护进程命名(and the actual program that executes is called named),Apacheweb系统的程序就叫httpd,在行式打印机上的打印守护进程就是lpd 。这只是一种惯例,不是标准或硬性规定 。例如,为Sendmail而应用的主要mail守护进程就叫sendmail,却不叫maild,这和您推测的一样 。
有时您必须和一个守护进程的程序通信,这些通信就叫信号 。您能发送一个信号给守护进程(或有关的另一些运行进程)与它进行通信,各个不同的信号各自就是一个数字编号,而您所发送的--数字编号各自有一个特殊的含义 。有些人把信号解悉为"请求",并在"请求"的文档里告诉您怎样把信号理解为请求 。您只能给所属于您的进程发信号,假如您给其他人的进程发信号,进程就会用kill(1) 或 kill(2)权限进行拒绝 。当然,root 用户会例外,它能把各种信号发送给每个进程 。
在某些案例里,FreeBSD也会向应用软件发送信号 。假如一个应用软件含有恶意写入并试图去访问内存,那是不可想象的,FreeBSD会向那个进程发送 段式违规 信号 (SIGSEGV) 。假如一个应用软件使用alarm(3)系统去进行周期性调用闹钟功能,每当达到时间时,FreeBSD会向应用软件发送闹钟信号(SIGALRM) 。
【freebsd 信号和杀死进程】有两个信号可以停止进程:SIGTERM 和 SIGKILL 。SIGTERM比较友好,进程能捕捉这个信号,根据您的需要来关闭程序 。在关闭程序之前,您可以结束打开的记录文件和完成正在做的任务 。在一些案例里,假如进程正在进行作业而且不能中断,那么进程可以忽略这个SIGTERM信号 。
对于SIGKILL信号,进程是不能忽略的 。这是一个 "“我不管您在做什么,立刻停止”"的信号 。假如您发送SIGKILL信号给进程,FreeBSD就将进程停止在那里 。[1].
您可能会去使用 SIGHUP、 SIGUSR1 和 SIGUSR2信号 。这都是些通用的信号,各种应用程序都可以应用在各方面的信号发送 。
假如您改变了web系统的配置文件--并想web系统去重读它的配置,您可以停止然后再启动httpd 。但这样做web系统会导致一个短暂的中断周期,那样是不受欢迎的 。几乎所有的守护进程在编写时,都会指定对SIGHUP 信号进行响应从而重读配置文件 。所以最好的方法就是不去杀死并重启httpd,而是发一个SIGHUP信号给他 。因为在这方面没有一个标准,不同的守护进程有不同的用法,所以不了解时应读一下守护进程的文档 。
发送信号可用kill(1) 命令,请参考kill(1)所列出的例子 。
发送一个信号给进程
这个例子显示了怎样去发一个信号给inetd(8) 。inetd配置文件是/etc/inetd.conf,如果想inetd 去重读文件系统的话,可以给它发一个SIGHUP 信号 。
寻找您要发送信号的进程ID,可以用ps(1) 加 grep(1)来完成 。grep(1)命令被用在搜索输出方面,搜索您指定的字符串 。这命令是由普通用户来执行的,而inetd(8)是root用户运行的,所以必须给ps(1)带上ax选项 。

推荐阅读