无法停止 Apache 进程

无法停止 Apache 进程

更新:回复评论:

检查apache的进程:

$ ps a | grep apache 3
grep: 3: No such file or directory
$ ps a | grep apache
 4514 pts/0    S+     0:00 grep --color=auto apache
$ ps a | grep apache2
 4516 pts/0    S+     0:00 grep --color=auto apache2

检查 apache 错误日志

$ tail /var/log/apache2/error.log
[Sun Aug 07 03:14:19 2011] [notice] Apache/2.2.16 (Ubuntu) PHP/5.3.3-1ubuntu9.5 with Suhosin-Patch configured -- resuming normal operations
[Mon Aug 08 03:13:58 2011] [notice] Graceful restart requested, doing restart
[Mon Aug 08 03:14:00 2011] [notice] Apache/2.2.16 (Ubuntu) PHP/5.3.3-1ubuntu9.5 with Suhosin-Patch configured -- resuming normal operations
[Mon Aug 08 09:03:16 2011] [notice] caught SIGTERM, shutting down
[Mon Aug 08 09:05:47 2011] [notice] Apache/2.2.16 (Ubuntu) PHP/5.3.3-1ubuntu9.5 with Suhosin-Patch configured -- resuming normal operations

原来的:我已经停止了 apache,但是为什么它仍然有相同数量的进程在运行?

$ ps -A | grep apache
 1663 ?        00:00:00 apache2
 1667 ?        00:00:00 apache2
 1668 ?        00:00:00 apache2
 1669 ?        00:00:00 apache2
 1670 ?        00:00:00 apache2
 1671 ?        00:00:00 apache2
$ /etc/init.d/apache2 stop
 * Stopping web server apache2                            [ OK ] 
$ ps -A | grep apache
 1663 ?        00:00:00 apache2
 1667 ?        00:00:00 apache2
 1668 ?        00:00:00 apache2
 1669 ?        00:00:00 apache2
 1670 ?        00:00:00 apache2
 1671 ?        00:00:00 apache2

谢谢!

答案1

当 Apache 拒绝正常停止或僵尸进程。对于前者,您可以使用 终止所有正在运行的进程sudo killall -9 apache2;但是,对于后者,您只需等待它们消失即可。如果 Apache 不想正常停止,您真正想要做的是调查发生了什么。不过,找出到底发生了什么可能很困难。

进程 ID 的交互strace可能会提供线索,说明哪些站点正在运行并导致问题。从上面的内容中,ps -A您可以使用以下方式检查第一个进程

strace -p 1663

这将附加到正在运行的进程堆栈跟踪,提供正在发生的事情的实时输出。您可以随时Ctrl+C

另一个资源是 Apache 的主错误日志,可以在 中找到。/var/log/apache2/error.log您需要获取大量日志并浏览其中的详细信息。如果问题是正在运行的持续问题

tail -f /var/log/apache2/error.log

这类似于strace将实时运行。对于最后 N 行,用替换-f其中-##正数,如 50、100、282 等。

答案2

确保您拥有适当的权限来停止该服务。

如果你运行:

service apache2 stop

你不会收到任何错误:

* 停止 Web 服务器 apache2

尝试:

sudo service apache2 stop      

答案3

我也遇到了同样的问题,并尝试了以下方法:

sudo apache2ctl stop

停止服务,以及

sudo apache2ctl start

重新开始。

它对我有用,欢迎任何可能的建议。

答案4

可以询问进程(通过发送信号停止它们。kill命令是一种方法。如果您知道进程的进程 ID (PID),则可以通过在终端中运行以下命令来很好地询问:

kill PID_OF_YOUR_PROCESS

上述示例向 PID 发送默认的 TERM 信号(代码 15)。您可以在kill 的手册页man kill)。

当程序忽略发送给它们的 TERM 信号时,仍然可以通过发送 KILL 信号(代码 9)施加更多压力。此信号是作为最后的手段使用的,因为进程可能不会保存任何未保存的数据。

在进程 ID 之前指定 a-SIGNAL_CODE作为第一个参数将向进程发送特定信号。该kill命令的另一个有用功能是您可以指定更多 PID,如下例所示:

kill -9 PID1 PID2 PID3 PID4

尝试使用该kill -9行终止 Apache 进程。除非有什么东西阻止它们这样做,否则它们应该会停止。

相关内容