Not able to stop apache processes

Tim*_*Tim 16 process apache2

更新:回复评论:

检查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
Run Code Online (Sandbox Code Playgroud)

检查 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
Run Code Online (Sandbox Code Playgroud)

原文:我已经停止了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
Run Code Online (Sandbox Code Playgroud)

谢谢!

Mar*_*ppi 28

当 Apache 拒绝正常停止或有Zombie Processes时,这种情况偶尔会发生。对于前者,您可以使用sudo killall -9 apache2;杀死所有正在运行的进程。但是,对于后者,您只需等待它们消失即可。如果 Apache 不想很好地停止,您真正想做的是调查正在发生的事情。不过,要弄清楚到底发生了什么可能很困难。

strace进程 id的交互可以提供有关哪些站点正在运行并导致问题的线索。从上面ps -A你可以检查第一个过程

strace -p 1663
Run Code Online (Sandbox Code Playgroud)

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

一个额外的资源是 Apache 的主要错误日志,可以在/var/log/apache2/error.log你想要得到一个不错的日志块并浏览它以获取详细信息。如果问题是持续运行的问题

tail -f /var/log/apache2/error.log
Run Code Online (Sandbox Code Playgroud)

这类似于strace将实时运行。在过去的N行替换-f-#其中#像50,100,282等的正数


小智 7

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

如果你运行:

service apache2 stop
Run Code Online (Sandbox Code Playgroud)

你不会得到任何错误只是:

* 停止 web 服务器 apache2

尝试:

sudo service apache2 stop      
Run Code Online (Sandbox Code Playgroud)


小智 0

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

kill PID_OF_YOUR_PROCESS
Run Code Online (Sandbox Code Playgroud)

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

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

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

kill -9 PID1 PID2 PID3 PID4
Run Code Online (Sandbox Code Playgroud)

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