p2p*_*ode 6 linux apache-http-server web http webserver
我是 Apache 和调试由它引起的问题的新手。我已经认识到,当阿帕奇启动时,它写入自己的进程ID中httpd.pid
所解释的人类可读的格式在这里。
我不太明白为什么首先需要进程 ID。即使需要,我也不明白这种方法的原因。
在 Linux 上,一个进程可以通过使用ps -ef
等来找到 Apache 的进程 id 。一般来说,我没有听说过任何其他进程将其进程 id 写入某个文件中。
这个 Apache 进程有什么特别之处?
在大多数 Unix 系统上,服务由init系统启动和停止。许多 Linux 发行版使用遗留的sysvinit,它几乎完全缺乏服务管理功能,因此脚本在/etc/init.d
或/etc/rc.d
执行启动或终止 Apache 的实际工作。这些initscripts是用普通的sh编写的,除了通过从预设位置读取其 PID 之外,没有其他方法来跟踪它们启动的进程。(initscript 只能知道它直接启动的进程的 PIDS,而不能知道那些进程的子进程的 PIDS进程,也不是上次调用同一个脚本时启动的进程。这意味着 initscript 无法跟踪被编程为“守护”自己的进程。)
(是的,可以使用ps -ef
或/proc
直接检查来找到进程。但是,这是一种有点不可靠的方法——可能有多个 Apache 进程同时运行:例如 mpm-prefork,或多个独立的 Apache 配置。因为其中,几乎Linux 上的每个守护进程都会在/run
或 中创建一个“pidfile” /var/run
,以便它可以很容易地被初始化脚本停止。你可能会有crond.pid
、ntpd.pid
、rsyslogd.pid
、sshd.pid
等等。)
只有最近的 Linux init 系统才会麻烦跟踪进程:Ubuntu 中的Upstart必须准确地被告知预期有多少分叉,而Fedora 中的systemd使用内核cgroups来跟踪属于服务的进程。