だから私は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>
は比較的きれいです(そして単純です)。
プロセスにシグナルを送信するだけです。 kill
は、これらの信号を送信するコマンドです。
キーボードコマンドCtrl + C(⌃
+ C
)はSIGINT、kill -9
はSIGKILLを送信し、kill -15
SIGTERMを送信します。
終了するためにサーバーに送信する信号は何ですか?
サーバーを起動した場合
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ポートです。
明確になりました。
または、単にkill %1
、バックグラウンドに置かれた最初のジョブを強制終了します
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でプロセスを強制終了します。
シャットダウンがあることがわかりましたが、これは別のスレッドから開始する必要があります。
このソリューションは私のために働いた: https://stackoverflow.com/a/22533929/573216
バックグラウンドプロセスとしてプログラムを実行するとき(&
その後))、例:
python -m SimpleHTTPServer 8888 &
ターミナルウィンドウがまだ開いている場合は、次の操作を実行できます。
jobs
実行中のシェルのプロセス内のすべてのバックグラウンドジョブのリストを取得します。
次のようになります。
$ 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を1回押して(トレースバックを待つ)、次にctrl + cをもう一度押すと私にとってはうまくいきました:)