【发布时间】:2013-11-14 10:35:58
【问题描述】:
我使用
运行了一个简单的 Web 服务器python -m simpleHTTPServer 8888 &.
它开始很好。然后使用 ctrl+C 尝试终止它,然后我转到
http://localhost:8888/
并且服务器仍在运行。我做错了吗?
我用zsh做终端,不知道有没有关系。
【问题讨论】:
标签: python terminal zsh simplehttpserver
我使用
运行了一个简单的 Web 服务器python -m simpleHTTPServer 8888 &.
它开始很好。然后使用 ctrl+C 尝试终止它,然后我转到
http://localhost:8888/
并且服务器仍在运行。我做错了吗?
我用zsh做终端,不知道有没有关系。
【问题讨论】:
标签: python terminal zsh simplehttpserver
TLDR:如果发送SIGKILL 不起作用,作为最后的手段尝试killall python
我遇到了一个类似的问题,即使我给它一个SIGKILL,localhost 服务器也会简单地更改为另一个 pid。唯一对我有用,并且可能会作为其他任何人遇到这种情况的最后手段的唯一方法就是简单地在 bash 中运行:killall python。
【讨论】:
因为&。它现在是一个后台进程,你不能通过 ctrl+c 杀死它。
因为它是服务器,我建议你使用&。要关闭服务器,请执行 -> ps aux | grep simpleHTTPServer 查找进程 id 然后 kill -9 pid
【讨论】:
这是因为& 导致命令在后台运行。启动进程后,您将获得进程 ID。使用该 ID,您可以kill 进程:
$ python &
[1] 5050
$ kill -15 5050
[1]+ Angehalten python
如果发送SIGTERM 信号(-15)不起作用,您可以使用SIGKILL(-9)。
编辑为使用SIGTERM 而不是SIGKILL,请参阅@starrify 的评论。
【讨论】:
fg进入python然后ctrl-c吗?
我不知道你是否需要&.。然而,在大多数 shell(当然包括 zsh)中,符号 & 表示 to start this task in the background,这意味着您的 CTRL+C 实际上没有被应用程序接收。
尝试删除&.,看看会发生什么。
已编辑:请参阅@RobinKrahl 的回答,了解如何通过使用kill 向它发送信号来终止进程。但是,为了终止一个正常工作的进程,我建议使用SIGTERM(信号编号 15)而不是 SIGKILL(信号编号 9)。
【讨论】:
CTRL+C 发送SIGINT。您应该使用kill -9 pid 发送终止信号来终止进程
【讨论】:
SIGINT 发送到 OP 的进程。