关于d3.js:如何关闭python simpleHTTPserver?

How do I shut down a python simpleHTTPserver?

所以我正在努力学习d3,wiki建议这样做

To view the examples locally, you must have a local web server. Any
web server will work; for example you can run Python's built-in
server:

python -m SimpleHTTPServer 8888 &

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

关闭它比使用kill 有更好的方法吗? 对于一份小工作来说,这似乎是一件大事。

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

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

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

默认的kill kill -15 相对干净(简单)。


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

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

您想将什么信号发送到服务器以结束它?


如果你已经启动了服务器

1
python -m SimpleHTTPServer 8888

然后你可以按ctrl + c来关闭服务器。

但是如果你已经启动了服务器

1
python -m SimpleHTTPServer 8888 &

要么

1
python -m SimpleHTTPServer 8888 & disown

你必须先看清单才能杀死进程,

运行命令

1
ps

要么

1
ps aux | less

它会告诉你一些这样的运行过程..

1
2
3
4
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。并通过运行此命令杀死该进程..

1
kill -9 7247

这里7247是python id。

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

<5233>

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

希望现在清楚。


或者你可以做kill %1,这将杀死后台的第一份工作


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

这就对了 !!

解释命令行:

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

  • grep SimpleHTTPServer:属于"SimpleHTTPServer"的过滤进程

  • grep $MYPORT:再次过滤进程属于"SimpleHTTPServer",其中端口为MYPORT(.i.e:MYPORT = 8888)

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

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


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

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


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

1
python -m SimpleHTTPServer 8888 &

如果终端窗口仍然打开,您可以执行以下操作:

1
jobs

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

它可能看起来像这样:

1
2
$ jobs
[1]+  Running                 python -m SimpleHTTPServer 8888 &

要杀死一个作业,你可以执行kill %1来杀死作业"[1]",或者执行fg %1将作业放在前台(fg)然后使用ctrl-c来杀死它。 (只需输入fg即可将最后一个后台进程放在前台)。

对于SimpleHTTPServer,似乎kill %1优于fg + ctrl-c。至少它没有用kill命令来抗议。

以上内容已在Mac OS中测试过,但据我记忆,它在Linux中的工作原理相同。

更新:要使其正常工作,必须直接从命令行启动Web服务器(逐字表示第一个代码段)。使用脚本启动它会使进程无法访问jobs


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

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


点击ctrl + c一次(等待追溯),然后再次点击ctrl + c为我做了诀窍:)