[解決済み] Ctrl-CでPythonスクリプトを終了できない
2022-07-09 05:32:18
質問
以下のスクリプトでPythonのスレッドをテストしています。
import threading
class FirstThread (threading.Thread):
def run (self):
while True:
print 'first'
class SecondThread (threading.Thread):
def run (self):
while True:
print 'second'
FirstThread().start()
SecondThread().start()
Kubuntu 11.10上のPython 2.7で動作しています。 Ctrl + C を実行しても死滅しません。また、システム シグナル用のハンドラを追加してみましたが、これも役に立ちませんでした。
import signal
import sys
def signal_handler(signal, frame):
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
プロセスを終了させるために、プログラムをバックグラウンドに送った後、PIDで終了させています。 Ctrl + Z というように、無視されることはありません。なぜ Ctrl + C が執拗に無視されるのはなぜですか?どうすれば解決できますか?
どのように解決するのですか?
Ctrlキー + C はメインスレッドを終了させますが、スレッドはデーモンモードではないので、実行し続け、プロセスを存続させます。デーモンにすればいいのです。
f = FirstThread()
f.daemon = True
f.start()
s = SecondThread()
s.daemon = True
s.start()
メインスレッドがスレッドを起動したら、あとは何もすることがありません。つまり、メインスレッドは終了し、スレッドは即座に破壊されるのです。そこで、メインスレッドを存続させることにしましょう。
import time
while True:
time.sleep(1)
を打つまで、'first' と 'second' を表示し続けます。 Ctrl + C .
編集してください。
コメントで指摘されているように、デーモンスレッドは一時ファイルのようなものをクリーンアップする機会を得られないかもしれません。もしそれが必要なら
KeyboardInterrupt
をメインスレッド上でキャッチし、 クリーンアップとシャットダウンを協調させることができます。しかし、多くの場合、デーモン スレッドを突然終了させることは、おそらく十分に良いことです。
関連
-
[解決済み] Pythonには文字列の'contains'サブストリングメソッドがありますか?
-
[解決済み] Pythonで現在時刻を取得する方法
-
[解決済み] Pythonで2つのリストを連結する方法は?
-
[解決済み] ファイルのコピー方法について教えてください。
-
[解決済み] Pythonで例外を手動で発生(スロー)させる
-
[解決済み] pipでPythonの全パッケージをアップグレードする方法
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み】Pythonに三項条件演算子はありますか?
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] デバッグモードでFlaskが2回初期化されないようにするには?重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ctrl+cでpythonを停止させる
-
[解決済み] DataFrameの文字列、dtypeがobjectの場合
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] Celeryでタスクのステータスを確認するには?
-
[解決済み] python: 2階層上のディレクトリを取得する
-
[解決済み] 乱数の行列を作成する簡単な方法
-
[解決済み] イテラブルを一定サイズのチャンクに分割する方法
-
[解決済み] Pandasがラベルで選択すると、Seriesを返す場合とDataFrameを返す場合があります。
-
[解決済み] デバッグモードでFlaskが2回初期化されないようにするには?重複
-
[解決済み] Python のモック patch.object を使って、他のメソッド内で呼び出されたメソッドの戻り値を変更する。