我知道在 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:很久以前我在这个网站上找到了这个命令,但我不记得在哪里,因此我无法参考作者。我为此道歉
您提到过
systemctl stop apache2
,可能是因为您的 Apache 作为系统服务启动。如果是这样,那么它重新启动的原因很可能Restart=
在相关服务单元配置文件 (apache2.service
) 中。见
man 5 systemd.service
:阅读手册以了解每个可能值的含义。也许你想要
Restart=no
。如果没有,请不要错过这个片段:如果你想使用 eg
Restart=on-abort
并且仍然能够用 SIGKILL (kill -s KILL
或kill -9
)杀死 Apache 而不是让它复活,请考虑放置在单元配置文件中。
注意 SIGKILL 应该作为最后的手段使用。
systemctl stop
应该是你更早的选择。我不知道你的意思是什么“紧急情况”,但服务重新启动的事实让我相信 systemd 可以运行并且很可能systemctl stop apache2
会运行。