如何关闭 python simpleHTTPserver?

问题描述 投票:0回答:10

所以我正在尝试学习 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>
相对干净(而且简单)。

python d3.js simplehttpserver
10个回答
44
投票

您只是向进程发送信号。

kill
是发送这些信号的命令。

键盘命令 Ctrl+C 发送 SIGINT,

kill -9
发送 SIGKILL,
kill -15
发送 SIGTERM。

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


42
投票

如果您已使用

启动服务器
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端口。

希望现在一切都清楚了。


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

就是这样!

解释一下命令行:

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

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

  • grep $MYPORT
    :再次过滤进程属于“SimpleHTTPServer”,其中端口是 MYPORT(即:MYPORT=8888)

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

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


14
投票

或者你可以直接做

kill %1
,这会杀死放在后台的第一个作业


12
投票

事实证明存在关闭,但这必须从另一个线程启动。

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


5
投票

当您将程序作为后台进程运行时(通过在其后面添加

&
),例如:

python -m SimpleHTTPServer 8888 &

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

jobs

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

它可能看起来像这样:

$ 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
的范围。


3
投票

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

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


0
投票

点击 CtrlC 一次(等待回溯),然后再次点击 CtrlC 对我来说就成功了:)


0
投票

这是另一种解决方案。

假设您已使用此命令启动服务器 -

python3 -m http.server 7800

要终止该进程,请使用 -

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

就是这样。


0
投票

只需终止运行命令的终端即可启动 http 服务器。

© www.soinside.com 2019 - 2024. All rights reserved.