72

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

要在本地查看示例,您必须拥有本地 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>相对干净(且简单)。

4

9 回答 9

44

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

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

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

于 2012-09-28T20:56:33.247 回答
37

如果您已经启动了服务器

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端口。

希望现在清楚。

于 2015-07-10T06:52:08.630 回答
17
MYPORT=8888; 
kill -9 `ps -ef |grep SimpleHTTPServer |grep $MYPORT |awk '{print $2}'`

这就对了!

解释命令行:

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

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

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

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

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

于 2016-05-13T15:39:57.860 回答
14

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

于 2012-09-28T21:18:21.640 回答
12

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

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

于 2015-01-17T16:06:36.170 回答
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 %1fg+ ctrl-c 更好。至少它不会用 kill 命令抗议。

以上已经在 Mac OS 中测试过,但据我所知,它在 Linux 中的工作方式相同。

更新:为此,必须直接从命令行启动 Web 服务器(逐字第一个代码片段)。使用脚本启动它会使jobs.

于 2018-07-27T22:50:37.767 回答
3

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

或者只是按照建议在前台运行它并使用CtrlC.

于 2012-09-28T20:53:49.133 回答
0

击中CtrlC一次(等待回溯),然后CtrlC再次击中对我来说是诀窍:)

于 2015-03-17T16:26:12.067 回答
0

这是另一个解决方案。

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

python3 -m http.server 7800

要杀死该进程,请使用 -

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

就是这样。

于 2021-04-26T07:58:28.980 回答