如何关闭 python simpleHTTPserver?

所以我试着学习 d3,而 维基百科建议

要在本地查看示例,必须有一个本地 Web 服务器 Web 服务器将工作; 例如,您可以运行 Python 的内置 服务器:

python -m SimpleHTTPServer 8888 &

太好了... 只是现在我有一个服务器运行... 但在某些时候,我想我可能应该再次关闭它。

有没有比使用 kill <pid>更好的方法来关闭它?对于一个小工作来说,这似乎是个大锤子。

(我正在运行 Mac OS 10.6.8(雪豹))

FWIW: ctrl+c提供了大约10行的追踪,抱怨被中断。

kill -3 <pid>在单独的窗口“ Python 意外退出”中给出 Finder 警告。

默认的 kill <pid>kill -15 <pid>相对简单。

129593 次浏览

这似乎有点过了,但是您可以使用 主管来启动和停止 simpleHttpserver,并将其完全作为服务进行管理。

或者按照建议在前台运行它,然后用 CtrlC杀死它。

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

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

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

或者你可以只做 kill %1,这将扼杀放在后台的第一个作业

原来有一个关闭,但这必须从另一个线程启动。

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

按一次 CtrlC(等待回溯) ,然后再按一次 CtrlC,对我来说很有效:)

如果您已使用

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是蟒蛇的 ID。

同样由于某些原因,如果端口仍然打开,你可以用这个命令关闭端口

fuser -k 8888/tcp

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

希望现在清楚了。

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

够了!

解释命令行:

  • 列出所有进程。

  • grep SimpleHTTPServer: 属于“ SimpleHTTPServer”的过滤进程

  • grep $MYPORT: filter again 进程属于“ SimpleHTTPServer”,其中端口是 MYPORT (. ie: MYPORT = 8888)

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

  • 使用适当的 PID 强制杀死进程。

当你运行一个程序作为后台进程时(通过在后面添加一个 &) ,例如:

python -m SimpleHTTPServer 8888 &

如果终端机窗口仍然打开,你可以:

jobs

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

它可能是这样的:

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

要终止作业,您可以执行 kill %1来终止作业“[1]”,或者执行 fg %1来将作业放在前台(fg) ,然后使用 ctrl-c 来终止作业。(简单地输入 fg将把最后的后台进程放在前台)。

对于 SimpleHTTPServer,似乎 kill %1fg + ctrl-c 更好。至少它不会用“杀死”命令抗议。

上面的内容已经在 Mac OS 中进行了测试,但就我所知,它在 Linux 中的工作原理是一样的。

更新: 要实现这一点,Web 服务器必须直接从命令行启动(一字不差地显示第一个代码片段)。使用一个脚本来启动它将使这个过程超出 jobs的范围。

还有一个办法。

假设您使用以下命令启动了服务器-

python3 -m http.server 7800

要终止该过程,请使用

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

就是这样。