apache2为什么有多个进程?

apache2为什么有多个进程?

这是命令ps -A |grep -i apache2输出:

xxxx@debian:~$ ps -A |grep -i apache2
 2362 ?        00:00:01 apache2
 2365 ?        00:00:00 apache2
 2367 ?        00:00:00 apache2
 2369 ?        00:00:00 apache2

当我使用命令时哪个是正确的 pid kill

答案1

因为这就是 apache 的工作方式:它以 root 身份启动,然后生成以普通用户身份启动的“子进程”。从安全角度来看,这是一种非常好的方法,因为用户 apache2 不应该能够破坏您的系统。

来自手册:

单个控制进程负责启动子进程,这些子进程监听连接并在连接到达时提供服务。Apache httpd 始终尝试维护多个备用或空闲的服务器进程,这些进程随时准备为传入请求提供服务。这样,客户端无需等待分叉出新的子进程即可为其请求提供服务。

StartServers、MinSpareServers、MaxSpareServers 和 MaxRequestWorkers 控制父进程如何创建子进程来处理请求。一般来说,Apache httpd 具有很强的自我调节能力,因此大多数站点不需要调整这些指令的默认值。需要处理超过 256 个同时请求的站点可能需要增加 MaxRequestWorkers,而内存有限的站点可能需要减少 MaxRequestWorkers 以防止服务器崩溃(将内存交换到磁盘并返回)。性能提示文档中提供了有关调整进程创建的更多信息。

现在关于这一点:

当我使用 kill 命令时哪个是正确的 pid?

没有必要终止 Apache 请求。我建议使用sudo service apache restart,不要终止与 Apache 相关的任何内容。应始终选择正常重启服务,而不是终止服务。

答案2

Apache 自动启动一些子进程,以便 Apache 能够更快地响应多个请求。因此守护进程不必为每个新请求分叉另一个新进程。

这样的子进程有一个生命周期,由 apache 配置中的几个指令配置。

ps当您像这样调用时,您可以看到进程的层次结构:

root@host:~$ ps faux | grep apache
root      3122  0.0  0.5  37164 11172 ?        Ss   Aug09   1:55 /usr/sbin/apache2 -k start
www-data 21970  0.0  0.8  43636 17060 ?        S    Nov03   0:41  \_ /usr/sbin/apache2 -k start
www-data 27484  0.0  0.8  43372 16660 ?        S    10:41   0:04  \_ /usr/sbin/apache2 -k start
www-data 29631  0.0  0.7  43132 16360 ?        S    13:36   0:02  \_ /usr/sbin/apache2 -k start
www-data 29632  0.0  0.5  37644 10888 ?        S    13:36   0:03  \_ /usr/sbin/apache2 -k start
www-data 29696  0.0  0.8  43380 16644 ?        S    13:42   0:02  \_ /usr/sbin/apache2 -k start
www-data 30025  0.0  0.7  42584 15864 ?        S    14:10   0:02  \_ /usr/sbin/apache2 -k start
www-data 30026  0.0  0.8  43968 17216 ?        S    14:10   0:02  \_ /usr/sbin/apache2 -k start
www-data 30092  0.0  0.7  43348 16556 ?        S    14:13   0:01  \_ /usr/sbin/apache2 -k start
www-data 30184  0.0  0.8  43636 16884 ?        S    14:18   0:01  \_ /usr/sbin/apache2 -k start
www-data 30235  0.0  0.7  42576 15836 ?        S    14:23   0:01  \_ /usr/sbin/apache2 -k start

因此,您只需“杀死”父进程即可。但在当今的现代 Linux 发行版中,我们以更生态的方式停止守护进程。要停止 apache 守护进程及其所有子进程,请执行以下操作:

sudo service apache stop

相关内容