如何关闭python simpleHTTPserver?

时间:2012-09-28 20:48:18

标签: python d3.js simplehttpserver

所以我正在尝试学习d3,wiki建议

  

要在本地查看示例,您必须拥有本地Web服务器。任何   网络服务器将工作;例如,您可以运行Python的内置   服务器:

     

python -m SimpleHTTPServer 8888 &

很好...只是现在我有一台服务器正在运行...但在某些时候我想我应该再次关闭它。

有没有比使用kill <pid>更好的关闭方式?对于一份小工作来说,这似乎是一件大事。

(我正在运行Mac OS 10.6.8(Snow Leopard))

FWIW:ctrl+c提供大约10行追溯,抱怨被打断。

kill -3 <pid>在一个单独的窗口中发出Finder警告'Python意外退出'。

默认kill <pid>kill -15 <pid>相对干净(简单)。

9 个答案:

答案 0 :(得分:35)

您只是向流程发送信号。 kill是发送这些信号的命令。

键盘命令Ctrl + C( + C)发送SIGINT,kill -9发送SIGKILL,kill -15发送SIGTERM。

您希望向服务器发送什么信号以结束它?

答案 1 :(得分:30)

如果您已使用

启动服务器
python -m SimpleHTTPServer 8888 

然后你可以按ctrl + c按下服务器。

但是如果你已经用

启动了服务器
python -m SimpleHTTPServer 8888 &

python -m SimpleHTTPServer 8888 & disown

你必须先看清单才能终止这个过程,

运行命令

ps

ps aux | less

它会显示一些像这样的运行过程..

PID TTY          TIME CMD
7247 pts/3     00:00:00 python
7360 pts/3     00:00:00 ps
23606 pts/3    00:00:00 bash

你可以从这里获得PID。并通过运行此命令来终止该进程..

kill -9 7247

这里7247是python id。

出于某种原因,如果端口仍然打开,您可以使用此命令关闭端口

fuser -k 8888/tcp

这里8888是python打开的tcp端口。

希望现在明白。

答案 2 :(得分:14)

或者您可以执行kill %1,这会杀死第一个放在后台的作业

答案 3 :(得分:13)

MYPORT=8888; 
kill -9 `ps -ef |grep SimpleHTTPServer |grep $MYPORT |awk '{print $2}'`

就是这样!!

说明命令行:

  • ps -ef:列出所有流程。

  • grep SimpleHTTPServer:过滤进程属于&#34; SimpleHTTPServer&#34;

  • grep $MYPORT:再次过滤进程属于&#34; SimpleHTTPServer&#34;其中港口是MYPORT(.i.e:MYPORT = 8888)

  • awk '{print $2}':打印结果的第二列,即PID(进程ID)

  • kill -9 <PID>:使用适当的PID强制终止进程。

答案 4 :(得分:5)

结果是关闭,但必须从另一个线程启动。

此解决方案对我有用:https://stackoverflow.com/a/22533929/573216

答案 5 :(得分:3)

看起来有点矫枉过正,但您可以使用supervisor启动和停止simpleHttpserver,并将其完全作为服务进行管理。

或者只是按照建议在前台运行它并用控制c

将其杀死

答案 6 :(得分:3)

当您将程序作为后台进程运行时(通过在其后添加var2),例如:

process.on('uncaughtException', function(err) {
  // process.whatever doesn't contain any active variables
});

如果终端窗口仍处于打开状态,则可以执行以下操作:

&

获取正在运行的shell进程中所有后台作业的列表。

它看起来像这样:

python -m SimpleHTTPServer 8888 &

要终止作业,可以执行jobs 终止作业“ [1]”,也可以执行$ jobs [1]+ Running python -m SimpleHTTPServer 8888 & 将作业置于前台(fg),然后使用ctrl-c执行杀了它。 (只需输入kill %1,会将最后一个后台进程置于前台。)

对于SimpleHTTPServer,似乎fg %1fg + ctrl-c好。至少它不反对kill命令。

以上内容已在Mac OS上进行了测试,但据我所知,它在Linux中的工作原理也是如此。

更新:为此,必须直接从命令行启动Web服务器(详细说明第一个代码段)。使用脚本启动该脚本将使该过程超出kill %1的范围。

答案 7 :(得分:0)

按一次ctrl + c(等待追踪),然后再按ctrl + c为我做了窍门:)

答案 8 :(得分:0)

这是另一种解决方案。

假设你已经使用这个命令启动了服务器 -

python3 -m http.server 7800

要终止该进程,请使用 -

pkill -9 -f  'python3 -m http.server 7800

就是这样。