2

我运行了一个简单的网络服务器

python -m simpleHTTPServer 8888 &.

它开始很好。然后使用 ctrl+C 尝试终止它,然后我去

http://localhost:8888/ 

并且服务器仍在运行。难道我做错了什么?

我正在使用 zsh 作为终端,不确定这是否与它有关。

4

5 回答 5

7

这是因为&导致命令在后台运行。启动进程后,您将获得进程 ID。使用该 ID,您可以kill处理:

$ python &
[1] 5050
$ kill -15 5050
[1]+  Angehalten              python

如果发送SIGTERM信号 ( -15) 不起作用,您可以使用SIGKILL( -9)。

编辑为使用SIGTERM而不是SIGKILL,请参阅@starrify 的评论。

于 2013-11-03T19:31:49.003 回答
0

CTRL+C发送SIGINT. 您应该发送一个终止信号kill -9 pid来终止进程

于 2013-11-03T19:30:27.787 回答
0

我不知道你是否需要&.这里。然而,在大多数 shell(当然包括 zsh)中,符号&mean to start this task in the background,这意味着您CTRL+C的应用程序实际上没有收到。

尝试删除&.,看看会发生什么。

已编辑:请参阅@RobinKrahl 的答案,了解如何通过使用kill. 但是,为了终止一个精细工作的过程,我建议使用SIGTERM(信号编号 15)而不是SIGKILL(信号编号 9)。

于 2013-11-03T19:32:32.493 回答
0

这是因为&。它现在是一个后台进程,你不能通过 ctrl+c 杀死它。

因为它是服务器,所以我建议你使用 &。要关闭服务器,请执行 -> ps aux | grep simpleHTTPServer 查找进程 ID,然后执行 kill -9 pid

于 2013-11-03T19:34:45.827 回答
0

TLDR:如果发送一个SIGKILL不起作用,作为最后的手段尝试killall python

我遇到了一个类似的问题,即使我给它一个SIGKILL. 唯一对我有用,并且可能会作为其他任何遇到这种情况的人的最后手段,就是简单地在 bash: 中运行killall python

于 2017-05-01T18:57:57.733 回答