无法停止apache进程


16

更新:回应评论:

检查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 . Web服务仍然可以通过网络浏览器使用吗?2.检查您的流程状态。它们可能已成为“僵尸进程”。grep apache 3.检查错误日志,可能有用的尾巴/var/log/apache/error.log
SamK 2011年

1.我正在使用Firefox。这是我的笔记本电脑。2和3看到我的更新。
全部

您是否尝试过此“ apache2 -k停止”或“ apache2 -k重新启动”?或重新启动系统?
blade19899'9

Answers:


28

当Apache拒绝很好地停止运行或具有Zombie Processes时,有时可能会发生这种情况。对于前者,您可以使用sudo killall -9 apache2; 但是,对于后者,您只需要等待它们消失即可。如果Apache不想停止运行,那么您真正想做的就是调查正在发生的事情。确切地找出正在发生的事情可能很困难。

strace进程ID 的交互可以提供有关哪个站点正在起作用并引起问题的线索。在上面,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等。


7

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

如果您运行:

service apache2 stop

您不会仅仅得到任何错误:

*停止Web服务器apache2

尝试:

sudo service apache2 stop      

当没有足够的内存或交换空间将近满时,这将失败,killall是唯一的解决方案
James Tan,

3

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

sudo apache2ctl stop

停止服务,以及

sudo apache2ctl start

重新开始。

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



0

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

kill PID_OF_YOUR_PROCESS

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

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

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

kill -9 PID1 PID2 PID3 PID4

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


如果读者不熟悉'kill'命令,那么几乎没有机会知道如何找到apache2进程的PID。
Max Barraclough

0

我遇到了同样的问题,但是您不能只执行一个service apache2 stop命令-您必须执行一个PER流程。然后,您可能要添加一个sudo在前面,以防万一您登录到某个需要它的奇怪帐户,所以如果看到9个进程正在运行,请执行9sudo service apache2 stop

对我来说很棒。


-2

安装nginx之后,我的Apache停止正常工作。在某些情况下,似乎使Apache与Nginx混淆。只需删除nginx

sudo apt-get purge nginx nginx-common
sudo apt-get autoremove
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.