![为什么我们会看到与同一应用程序/所有者相关的多个 PID,如下所示。这是什么意思?](https://linux22.com/image/797473/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E4%BB%AC%E4%BC%9A%E7%9C%8B%E5%88%B0%E4%B8%8E%E5%90%8C%E4%B8%80%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%2F%E6%89%80%E6%9C%89%E8%80%85%E7%9B%B8%E5%85%B3%E7%9A%84%E5%A4%9A%E4%B8%AA%20PID%EF%BC%8C%E5%A6%82%E4%B8%8B%E6%89%80%E7%A4%BA%E3%80%82%E8%BF%99%E6%98%AF%E4%BB%80%E4%B9%88%E6%84%8F%E6%80%9D%EF%BC%9F.png)
为什么我们会看到与同一应用程序/所有者相关的多个 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”工作模型的选择影响。