这是命令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