![为什么当我在启动时自动启动 httpd 时会有 9 个 httpd 进程在运行?](https://linux22.com/image/572590/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%BD%93%E6%88%91%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E8%87%AA%E5%8A%A8%E5%90%AF%E5%8A%A8%20httpd%20%E6%97%B6%E4%BC%9A%E6%9C%89%209%20%E4%B8%AA%20httpd%20%E8%BF%9B%E7%A8%8B%E5%9C%A8%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
Apgrep httpd
产生 9 个 pid:
1624
1651
1652
1653
1654
1655
1656
1657
1658
如果我杀死具有第一个 pid(此处)的 httpd 进程1624
,则所有 httpd 进程都会被杀死。
虽然如果杀死除第一个之外的其他 pid 的进程,也只会杀死该进程。并且一旦 httpd 进程数低于 6,它就会生成 httpd 进程,并且 httpd 进程数将维持在 6 个常数。
当我手动启动 httpd 时不会发生这种情况。只创建了一个进程。
- 为什么会出现上述行为?
- httpd 是否以基于线程的方式启动?
Also I am running httpd on Fedora 15 on a 6 core processor.
并且我没有对注释/etc/sysconfig/httpd
中的每一行进行任何更改。/etc/sysconfig/httpd
答案1
行为取决于您使用的 MPM,但确实如此;这些是工作进程。请StartServers
在您的配置中查找该指令。
答案2
当您通过服务或 /etc/init.d/httpd 启动 httpd 时,它会读取 /etc/sysconfig/httpd,如果 HTTPD 没有更改,它会启动 prefork 模型。当您手动启动它时,您可能正在启动基于 worker 的模型。如果您查看 /etc/httpd/conf/httpd.conf 并查找 prefork,您将找到与任一模型相关的部分。StartServers 表示要加载多少个进程。