質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

1949閲覧

Python2.7でAddress already in useを自動的に対処したい

IC445

総合スコア24

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2018/11/08 11:09

Python 2.74を使っています。
SocketServerモジュールを使っているのですが、
「Address already in use」のエラーが出てしまいます。

sudo lsof -i | grep http
(「apache2 22461 www-data 3u IPv4 4757697 0t0 TCP *:http (LISTEN)」)が表示される
sudo kill -9 [pid(この場合、22461)]

多くのサイトで、上記のように対応する方法が載っておりますが、
こちらを自動的に対処したいと考えています。
Pythonのコード中で、上記を自動的に対応する方法はありますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

psutil あたりを使えば、当該ポートを使用しているプロセスを探して kill することは、次の様なコードで容易かとは存じます。

import psutil for conn in psutil.net_connections('tcp'): if conn.laddr.port == 80: assert conn.pid is not None psutil.Process(conn.pid).kill()

但し、他のユーザが実行しているプロセスの pid を取得して kill するためには、root 相当の権限が必要な場合が殆ど思います。また、対象が Apache 等の、自分が開発している物とは異なるプロセスなのであれば、予め用意された適切な方法 (apachectlsystemctl など) で終了させてあげるべきです。

実際に何がなさりたいのかの詳細は分かりませんが、上記のような理由から、他のプロセスとポート番号が衝突する場合は代わりに次の何れかの手段を取った方が宜しいかと思われます。

  • (少なくとも開発中は) 空いている他のポートを使用する
  • どうしても tcp/80 が使いたければ、 Apache 側の使用するポートを変更しておく

投稿2018/11/11 04:45

argparse

総合スコア1017

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問