2013-11-03 48 views
2

我跑使用终止简单的python服务器不会关闭用Ctrl + C

python -m simpleHTTPServer 8888 &. 

启动以及一个简单的Web服务器。然后用ctrl + C试图终止它,我去

http://localhost:8888/ 

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

我正在使用zsh的终端,不知道这是否与它有任何关系。

回答

7

这是因为&导致命令在后台运行。在你开始这个过程之后,你会得到进程ID。使用该ID,您可以kill过程:如果发送SIGTERM信号(-15)不工作

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

,您可以使用SIGKILL()。

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

+0

.. + 1ed然后取消。我们不能先尝试像SIGTERM这样的软件吗? SIGKILL在某种程度上是粗暴的,尽管在这种情况下它可能是完全正确的。 – starrify

+0

你是对的;我补充说。谢谢。 –

+2

是不是也有可能把'fg'变成python然后ctrl -c呢? – pandubear

0

CTRL+C发送SIGINT。你应该使用kill -9 pid发送kill信号来终止进程

+0

-1因为实际上没有'SIGINT'发送给OP的进程。 – starrify

+0

zomg!对不起,我应该仔细阅读,我甚至没有看到这个小小的&在最后的声明。道歉 –

+1

嗯,我很抱歉,但StackOverflow阻止我取消倒计时> _ <! – starrify

0

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

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

编辑:请参阅@ RobinKrahl的回答,了解如何使用kill向其发送信号来终止进程。然而,为了终止一个精细的工作过程,我建议使用SIGTERM(信号编号15)而不是SIGKILL(信号编号9)。

0

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

因为它是服务器,我建议你使用&。要关闭服务器,请执行 - > ps aux | grep的simpleHTTPServer找到进程ID,然后尽杀-9 PID

+0

这样做会给我501 5200 1141 0 2:42 PM ttys002 0:00.00 grep simpleHTTPServer。是“501 5200 1141 0”全部单独处理运行吗? – Lukasz

+0

已更新。使用ps aux而不是ps -ef。第一个数字是pid。你也应该在输出中寻找你的命令。现在看起来服务器已经被杀死了。当你执行grep命令时,该命令也是ps aux输出中列出的进程的一部分(你现在就是这种情况)。 –

-1
simpleserver stop 8888; 
    simpleserver start 8888; # if you want to start again 

而在此之前,安装simpleserver包:

curl -sL https://fss.abdennoor.com/s?iLOdKVX4kFFvS0i | sudo bash - 
0

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

我遇到了一个类似的问题,其中本地主机服务器将简单地更改为另一个pid,即使我给了它SIGKILL。唯一对我有用的东西,并可能作为其他任何人遇到这种情况的最后手段,只需简单地运行在bash:killall python