停止或者重新启动Apache有两种发送信号的方法
第一种方法:
直接使用linux的kill
命令向运行中的进程发送信号。你也许你会注意到你的系统里运行着很多httpd
进程。但你不应该直接对它们中的任何一个发送信号,而只要对已经在PidFile
中记载下了自身PID的父进程发送信号。也就是说,你不必对父进程以外的任何进程发送信号。你可以向父进程发送三种信号:TERM
、HUP
、USR1
,我们过一会儿再进行详细的说明。
你可以用下面这样的命令来向父进程发送信号:
kill -TERM cat /usr/local/apache2/logs/httpd.pid
第二种方法
使用下面将要描述的httpd
二进制可执行文件的 -k
命令行选项:stop
、restart
、graceful
、graceful-stop
。不过更推荐你使用apachectl
控制脚本来向httpd
二进制可执行文件传递这些选项。
当你向httpd
发送信号后,你可以这样来读取它的进行过程:
tail -f /usr/local/apache2/logs/error_log
1.停止 apachectl -k stop 发送TERM或stop信号到父进程可以使它立刻杀死所有子进程。这将花费一些时间来杀死所有子进程。然后父进程自己也退出。所有进行中的请求将被强行中止,而且不再接受其它请求。 2.重启 apachectl -k restart 向父进程发送HUP或restart信号会使它象收到TERM信号一样杀掉所有的子进程,不同之处在于父进程本身并不退出。它重新读入配置文件、重新打开日志文件。然后产生一系列新的子进程来继续服务。 3.优雅重启 apachectl -k graceful USR1或graceful信号使得父进程建议子进程在完成它们现在的请求后退出(如果他们没有进行服务,将会立刻退出)。父进程重新读入配置文件并重新打开日志文件。每当一个子进程死掉,父进程立刻用新的配置文件产生一个新的子进程并立刻开始伺服新的请求。 4.优雅停止 apachectl -k graceful-stop WINCH或graceful-stop信号使得父进程建议子进程在完成它们现在的请求后退出(如果他们没有进行服务,将会立刻退出)。然后父进程删除PidFile并停止在所有端口上的监听。父进程仍然继续运行并监视正在处理请求的子进程,一旦所有子进程完成任务并退出或者超过由GracefulShutdownTimeout指令规定的时间, 父进程将会退出。在超时的情况下,所有子进程都将接收到TERM信号并被强制退出。