web-dev-qa-db-ja.com

python simpleHTTPserver?

だから私はd3を学ぼうとしていますが、 wiki

サンプルをローカルで表示するには、ローカルWebサーバーが必要です。どのWebサーバーでも機能します。たとえば、Pythonの組み込みサーバーを実行できます。

python -m SimpleHTTPServer 8888 &

素晴らしい...今はサーバーを実行しています...しかし、ある時点で、おそらく再びシャットダウンする必要があると思います。

kill <pid>を使用するよりも適切な方法でシャットダウンできますか?それはちょっとした仕事のための一種の大きなハンマーのようです。

(Mac OS 10.6.8(Snow Leopard)を実行しています)

FWIW:ctrl+cは約10行のトレースバックを提供し、中断されることを訴えます。

kill -3 <pid>は、「Pythonが予期せず終了しました」という別のウィンドウにFinderの警告を表示します。

デフォルトのkill <pid>kill -15 <pid>は比較的きれいです(そして単純です)。

60
Suz

プロセスにシグナルを送信するだけです。 killは、これらの信号を送信するコマンドです。

キーボードコマンドCtrl + C( + C)はSIGINT、kill -9はSIGKILLを送信し、kill -15 SIGTERMを送信します。

終了するためにサーバーに送信する信号は何ですか?

37
xbello

サーバーを起動した場合

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ポートです。

明確になりました。

30
codersaif

または、単にkill %1、バックグラウンドに置かれた最初のジョブを強制終了します

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

それだ !!

コマンドラインの説明:

  • ps -ef:すべてのプロセスをリストします。

  • grep SimpleHTTPServer:「SimpleHTTPServer」に属するフィルタープロセス

  • grep $MYPORT:再びフィルター処理するプロセスは、ポートがMYPORTの「SimpleHTTPServer」に属します(つまり、MYPORT = 8888)

  • awk '{print $2}':PID(プロセスID)である結果の2番目の列を出力します

  • kill -9 <PID>:適切なPIDでプロセスを強制終了します。

13
Abdennour TOUMI

シャットダウンがあることがわかりましたが、これは別のスレッドから開始する必要があります。

このソリューションは私のために働いた: https://stackoverflow.com/a/22533929/573216

6
dirkk0

バックグラウンドプロセスとしてプログラムを実行するとき(&その後))、例:

python -m SimpleHTTPServer 8888 &

ターミナルウィンドウがまだ開いている場合は、次の操作を実行できます。

jobs

実行中のシェルのプロセス内のすべてのバックグラウンドジョブのリストを取得します。

次のようになります。

$ 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の範囲外になります。

4
Erk

やりすぎのように思えますが、 supervisor を使用してsimpleHttpserverを開始および停止し、サービスとして完全に管理できます。

または、提案されているようにフォアグラウンドで実行し、コントロールcで強制終了します

3
dm03514

Ctrl + cを1回押して(トレースバックを待つ)、次にctrl + cをもう一度押すと私にとってはうまくいきました:)

0
small_data88