我的 CentOS 服务器上运行着一个 Apache httpd 服务器,但显然它既以 root 身份运行一个 httpd 进程,又以 apache 用户身份运行一个 httpd 进程。
参见顶部的屏幕截图:
配置文件中的用户和组设置为 apache,所以我在这里有点迷失。
你们有人知道是什么启动了“root”进程,以及它为什么运行吗?
答案1
以“apache”身份运行的是工作进程。以“root”身份运行的是主进程。这完全正常。
主进程将根据需要生成工作进程(无论配置文件中指定了什么约束)来处理传入流量。它通常需要 root 权限才能绑定到低端口 80 和 443。绑定后,它将放弃对 apache 用户的权限。
工作者进程会不时被收割。长时间运行的进程是以 root 身份运行的进程。如果您查看 httpd.conf,您会看到类似以下内容的块:
StartServers 1
MinSpareServers 1
MaxSpareServers 5
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000
因此,在此示例中,主进程将在启动时生成一个工作进程。如果流量增加,它将生成更多工作进程。一旦工作进程处理了 4000 个请求,工作进程将终止,主进程可能会根据流量生成新的工作进程。
答案2
我不知道为什么或者怎么样,但看起来根进程是父进程,而 apache 拥有的进程是子进程。
我运行pstree -Acp | grep httpd
并比较了它ps aux | grep httpd