我跑使用终止简单的python服务器不会关闭用Ctrl + C
python -m simpleHTTPServer 8888 &.
启动以及一个简单的Web服务器。然后用ctrl + C试图终止它,我去
http://localhost:8888/
和服务器仍在运行。难道我做错了什么?
我正在使用zsh的终端,不知道这是否与它有任何关系。
我跑使用终止简单的python服务器不会关闭用Ctrl + C
python -m simpleHTTPServer 8888 &.
启动以及一个简单的Web服务器。然后用ctrl + C试图终止它,我去
http://localhost:8888/
和服务器仍在运行。难道我做错了什么?
我正在使用zsh的终端,不知道这是否与它有任何关系。
这是因为&
导致命令在后台运行。在你开始这个过程之后,你会得到进程ID。使用该ID,您可以kill
过程:如果发送SIGTERM
信号(-15
)不工作
$ python &
[1] 5050
$ kill -15 5050
[1]+ Angehalten python
,您可以使用SIGKILL
()。
编辑为使用SIGTERM
而不是SIGKILL
,请参阅@ starrify的评论。
我不知道你是否需要&.
这里。但是,在大多数shell(当然包括zsh)中,符号&
表示to start this task in the background
,这意味着您的CTRL+C
实际上并未被应用程序接收。
尝试删除&.
,看看会发生什么。
编辑:请参阅@ RobinKrahl的回答,了解如何使用kill
向其发送信号来终止进程。然而,为了终止一个精细的工作过程,我建议使用SIGTERM
(信号编号15)而不是SIGKILL
(信号编号9)。
这是因为&。它现在是一个你不能通过ctrl + c杀死的后台进程。
因为它是服务器,我建议你使用&。要关闭服务器,请执行 - > ps aux | grep的simpleHTTPServer找到进程ID,然后尽杀-9 PID
这样做会给我501 5200 1141 0 2:42 PM ttys002 0:00.00 grep simpleHTTPServer。是“501 5200 1141 0”全部单独处理运行吗? – Lukasz
已更新。使用ps aux而不是ps -ef。第一个数字是pid。你也应该在输出中寻找你的命令。现在看起来服务器已经被杀死了。当你执行grep命令时,该命令也是ps aux输出中列出的进程的一部分(你现在就是这种情况)。 –
simpleserver stop 8888;
simpleserver start 8888; # if you want to start again
而在此之前,安装simpleserver
包:
curl -sL https://fss.abdennoor.com/s?iLOdKVX4kFFvS0i | sudo bash -
TLDR:如果发送SIGKILL
不工作,作为一个最后的手段尝试killall python
我遇到了一个类似的问题,其中本地主机服务器将简单地更改为另一个pid,即使我给了它SIGKILL
。唯一对我有用的东西,并可能作为其他任何人遇到这种情况的最后手段,只需简单地运行在bash:killall python
。
.. + 1ed然后取消。我们不能先尝试像SIGTERM这样的软件吗? SIGKILL在某种程度上是粗暴的,尽管在这种情况下它可能是完全正确的。 – starrify
你是对的;我补充说。谢谢。 –
是不是也有可能把'fg'变成python然后ctrl -c呢? – pandubear