Vista マシンで Putty を使用して、開発サーバー (Ubuntu) にログインし、Django テスト サーバーを起動しました。Apache のようなサーバーを実行して、Web アプリをテストします。アプリは、内部 IP アドレスのポート 8080 で実行されます。Web ブラウザーで開き、 に移動できます192.168.0.130:8080
。
しばらくコンピューターを離れて (物理的に)、戻ってきたところ、Putty 接続がタイムアウトしていました。大したことではなく、サーバーに再度ログインしただけです。ただし、Django テスト サーバーを実行しようとすると、ポートがすでに使用されているというメッセージが表示されます。つまり、最初のテスト サーバー インスタンスがまだポート 8080 で実行されているということです (と思われます)。
このプロセスを終了するにはどうしたらいいでしょうか? そもそもプロセスはどのようなものですか? 試してみたところ、ps aux
これが問題のあるプロセスであるような気がします:
garfonzo 5719 0.3 0.0 0 0 ? D 08:58 1:07 [python]
今朝その頃にサーバーを起動しましたが、Django は Python ベースです。ただし、 を実行してもkill 5719
何も起こりません。プロセスは終了せず、テスト サーバーを起動できません。
何か案は!?
編集- 詳細については:
私も実行してみましたnetstat -tulpn
が、出力は次のようになりました。
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 192.168.1.130:8080 0.0.0.0:* LISTEN -
それは便利ですね。プロセス ID を知りたいポートには PID がありません。
答え1
これが正しいプロセスであると確信している場合(おそらくそうでしょう)、そしてnetstatが何も有用な情報を提供しない場合は、
kill -9 5719
-9 スイッチは、デフォルトの SIGTERM シグナルではなく SIGKILL を送信し、停止可能な場合はプロセスを停止します。
SIGTERM シグナルがプロセスに送信され、事実上シャットダウンを要求します。プロセスは SIGTERM をキャッチしてまったく別の処理を実行することもできます。
一方、SIGKILL シグナルはプロセスに送信されないため、無視することはできません。カーネルはプロセスを直ちに終了するため、プロセスにクリーンアップの機会を与えないため、最後の手段としてのみ使用する必要があります。
プロセスが I/O ブロックされている場合、SIGKILL では停止できない可能性があります。その場合、プロセスはゾンビ プロセスであり、クリアするには再起動が必要になる可能性があります。
詳細: プロセスが I/O を待機している場合は、そのプロセスを強制終了することはできません。強制終了すると、その I/O を実行するカーネル関数のコールバックが未処理のまま残ってしまうためです。
または、プロセスの親が を呼び出さない場合wait
、プロセスはゾンビプロセスのままになります。デッドプロセスの概要は、次の場所にあります。http://www.linuxsa.org.au/tips/zombies.html。
PS に表示されるゾンビ プロセスとは何ですか? 終了しても消えません。
ゾンビは死んだプロセスです。死んだプロセスを殺すことはできません。すべてのプロセスは最終的に死に、そうなるとゾンビになります。ゾンビはリソースをほとんど消費しませんが、これはゾンビが死んでいるため当然のことです。ゾンビが存在する理由は、ゾンビの親 (プロセス) がゾンビの終了ステータスとリソース使用統計を取得できるようにするためです。親は、wait() システム コールの 1 つを使用して、オペレーティング システムにゾンビが必要なくなったことを通知します。
プロセスが終了すると、その子プロセスはすべてプロセス番号 1 (init プロセス) の子になります。init は、子がゾンビのままにならないように、常に子が終了を待機します。
ゾンビ プロセスがある場合、そのゾンビは親プロセスによって待機されていないことを意味します (ps -l で表示される PPID を参照)。選択肢は 3 つあります。親プロセスを修正する (待機させる)、親プロセスを終了する、またはそのまま放置する。ゾンビは ps の出力で 1 行余分に表示される程度なので、そのまま放置するのはそれほど難しくないことを覚えておいてください。