如何通过 kill -9 停止 apache2

如何通过 kill -9 停止 apache2

我知道在 Linux 上启动或停止 apache2 的正常方法是:

sudo /etc/init.d/apache2 start|stop

或者…

sudo service apache2 start|stop

或者…

sudo systemctl start|stop apache2

但是,在紧急情况下,我想使用“kill”命令停止进程。为此,我使用以下命令来停止 PID:

for pid in $(ps -ef | grep -i '[a]pache*' | awk '{print $2}'); do kill -9 $pid &> /dev/null; done

出去

user@user:~$ ps -ef | grep -i '[a]pache*'
root      173437       1  0 19:24 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  173438  173437  0 19:24 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  173439  173437  0 19:24 ?        00:00:00 /usr/sbin/apache2 -k start
user@user:~$ for pid in $(ps -ef | grep -i '[a]pache*' | awk '{print $2}'); do sudo kill -9 $pid &> /dev/null; done
user@user:~$ ps -ef | grep -i '[a]pache*'
root      174321       1  0 19:24 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  174322  174321  0 19:24 ?        00:00:00 /usr/sbin/apache2 -k start
www-data  174323  174321  0 19:24 ?        00:00:00 /usr/sbin/apache2 -k start

... 新的 apache2 PID 出来了

这个命令有什么问题?

谢谢

PD:很久以前我在这个网站上找到了这个命令,但我不记得在哪里,因此我无法参考作者。对此我深表歉意

答案1

您提到systemctl stop apache2,可能是因为您的 Apache 作为 systemd 服务启动。如果是这样,那么它重新启动的原因很可能是Restart=在相关的服务单元配置文件中(apache2.service)。

man 5 systemd.service

Restart=
配置当服务进程退出、被终止或超时时是否重新启动服务。[…]

no取、on-successon-failureon-abnormalon-watchdogon-abort或之一always。如果设置为no(默认),服务将不会重新启动。[…]

阅读手册以了解每个可能值的含义。或许你想要的Restart=no。如果没有,不要错过这个片段:

作为上述设置的例外,如果在 […] 中指定了退出代码或信号,RestartPreventExitStatus=或者服务已停止systemctl stop或执行了等效操作,则不会重新启动服务。此外,如果在 […] 中指定了退出代码或信号,则始终会重新启动服务RestartForceExitStatus=

如果你想使用例如,Restart=on-abort仍然能够用SIGKILL(kill -s KILLkill -9)杀死Apache,而不是让它复活,考虑放置

RestartPreventExitStatus=SIGKILL

在单位配置文件中。

注意 SIGKILL 应作为最后的手段使用。systemctl stop应该是您的早期选择。我不知道您说的“紧急情况”是什么意思,但服务重新启动的事实让我相信 systemd 可以运行,而且很可能systemctl stop apache2可以正常工作。

相关内容