为什么apache2有多个进程?

Liu*_*Hao 3 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
Run Code Online (Sandbox Code Playgroud)

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

Rin*_*ind 5

因为这就是 apache 的工作方式:它以 root 身份启动,然后生成以普通用户身份启动的“孩子”。安全明智是一个很好的方法,因为用户 apache2 不应该让你的系统变砖。

从手册:

单个控制进程负责启动子进程,这些子进程侦听连接并在它们到达时为其提供服务。Apache httpd 总是试图维护几个备用或空闲的服务器进程,它们随时准备为传入的请求提供服务。通过这种方式,客户端不需要等待新的子进程被派生,然后他们的请求才能得到服务。

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

现在关于这个:

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

没有必要杀死 apache 请求。我建议使用sudo service apache restart而不是杀死任何与 apache 相关的东西。应该始终选择优雅地重新启动服务而不是杀死。


cha*_*aos 5

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
Run Code Online (Sandbox Code Playgroud)

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

sudo service apache stop
Run Code Online (Sandbox Code Playgroud)