为什么我们会看到与同一应用程序/所有者相关的多个 PID,如下所示。这是什么意思?
$ ps -ef | grep httpd | grep -v grep
apache 9619 20181 0 07:08 ? 00:00:03 /usr/sbin/httpd
apache 10092 20181 0 Jan24 ? 00:00:07 /usr/sbin/httpd
apache 13086 20181 0 06:09 ? 00:00:00 /usr/sbin/httpd
apache 13717 20181 0 Jan25 ? 00:00:01 /usr/sbin/httpd
apache 14730 20181 0 07:13 ? 00:00:01 /usr/sbin/httpd
apache 16359 20181 0 09:54 ? 00:00:00 /usr/sbin/httpd
root 20181 1 0 2011 ? 00:00:01 /usr/sbin/httpd
apache 21450 20181 0 09:55 ? 00:00:00 /usr/sbin/httpd
答案1
每个 httpd PID 代表一个正在运行以处理传入请求的服务器进程。可以通过 httpd conf 文件中的以下指令来控制在后台运行的服务器进程的默认数量(其他应用程序类似)。
# StartServers: number of server processes to start
# MinSpareServers: minimum number of server processes which are kept spare
# MaxSpareServers: maximum number of server processes which are kept spare
# MaxClients: maximum number of server processes allowed to start
# MaxRequestsPerChild: maximum number of requests a server process serves
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxClients 150
MaxRequestsPerChild 0
</IfModule>
答案2
这就是 Apache Web 服务器的工作方式。基本上,主进程以 root 身份启动,根据配置文件打开适当的端口,然后复制/分叉您配置的侦听器/服务器数量。这些服务器以配置的用户(在本例中为 apache)身份运行,基本上处理一个 HTTP 事务。因此,配置的服务器数量越多,您可以同时处理的请求就越多。
所以回答你的问题的意思是,看起来你有一个 Apache 网站正在运行。
答案3
这是正常的;Apache 和许多其他应用程序一样,会运行自身的多个副本。在这种情况下,是完整进程(具有自己的 PID),但在其他配置中,可能是多个线程。
StartServers、MinSpareServers、MaxSpareServers 等是值得注意的配置指令。
答案4
第二列中的数字是 PPIDS(父 PID),它表示大多数 http 进程都是原始进程(在本例中为最初以 root 身份启动的 20181)的子进程(由于 exec/fork/...)。
正如其他答案已经指出的那样,这是实现多处理以利用多个 CPU 进行并行处理的一种选择。这受 Apache 配置中“mpm”工作模型的选择影响。