我运行了一个简单的网络服务器
python -m simpleHTTPServer 8888 &.
它开始很好。然后使用 ctrl+C 尝试终止它,然后我去
http://localhost:8888/
并且服务器仍在运行。难道我做错了什么?
我正在使用 zsh 作为终端,不确定这是否与它有关。
我运行了一个简单的网络服务器
python -m simpleHTTPServer 8888 &.
它开始很好。然后使用 ctrl+C 尝试终止它,然后我去
http://localhost:8888/
并且服务器仍在运行。难道我做错了什么?
我正在使用 zsh 作为终端,不确定这是否与它有关。
这是因为&
导致命令在后台运行。启动进程后,您将获得进程 ID。使用该 ID,您可以kill
处理:
$ python &
[1] 5050
$ kill -15 5050
[1]+ Angehalten python
如果发送SIGTERM
信号 ( -15
) 不起作用,您可以使用SIGKILL
( -9
)。
编辑为使用SIGTERM
而不是SIGKILL
,请参阅@starrify 的评论。
CTRL+C
发送SIGINT
. 您应该发送一个终止信号kill -9 pid
来终止进程
我不知道你是否需要&.
这里。然而,在大多数 shell(当然包括 zsh)中,符号&
mean to start this task in the background
,这意味着您CTRL+C
的应用程序实际上没有收到。
尝试删除&.
,看看会发生什么。
已编辑:请参阅@RobinKrahl 的答案,了解如何通过使用kill
. 但是,为了终止一个精细工作的过程,我建议使用SIGTERM
(信号编号 15)而不是SIGKILL
(信号编号 9)。
这是因为&。它现在是一个后台进程,你不能通过 ctrl+c 杀死它。
因为它是服务器,所以我建议你使用 &。要关闭服务器,请执行 -> ps aux | grep simpleHTTPServer 查找进程 ID,然后执行 kill -9 pid
TLDR:如果发送一个SIGKILL
不起作用,作为最后的手段尝试killall python
我遇到了一个类似的问题,即使我给它一个SIGKILL
. 唯一对我有用,并且可能会作为其他任何遇到这种情况的人的最后手段,就是简单地在 bash: 中运行killall python
。