私はSOFですでに同様の質問があったと思います。しかし、私は本当に私の特定のケースのための適切な解決策を見つけることができませんでした。私は起動時にいくつかのワーカースレッドを開き、SIGTERMが受信されるまで実行を継続するデーモンを作ろうとしています。 SIGTERMを受け取ると、親スレッドはすべてのワーカースレッドを終了し、プロセス全体が停止します。これは私のコードがどのように見えるかです:スレッドが起動した後にシグナルハンドラが機能しない
from lib.threadrunner import ThreadRunner
import signal
import time
def sigint_handler(signum, frame):
print 'Stop pressing the CTRL+C!'
signal.signal(signal.SIGINT, sigint_handler)
objectToRun = ClassToRun(cfg)
time.sleep(3)
# The below code uses threading module to create 3 threads
threadRunner = ThreadRunner()
threadRunner.load('Task Name', objectToRun)
threadRunner.start(3)
threadRunner.joinAll()
私はすべてのスレッドが開始された後、SIGINTを送信するためにCtrl + C
をヒットした場合は、sigint_handler
機能が起動しない、何もプリントアウトされなかっます起こします。しかし、スレッドが(スリープスリープ時間が追加されている間に)起動する前に私がCtrl + C
をヒットすると、Stop pressing the CTRL+C!
が表示されます。なぜこれがこのように働いているのか、どうすればこの問題を解決できるかわからない。
PS:threadRunner
クラスのコードが必要な場合は、それも提供します。