У меня есть скрипт Python, который я хотел бы остановить, отправив сигнал «SIGINT» с помощью командной строки:
kill -2 <PID>
Сценарий порождает дочерний процесс, а затем входит в бесконечный цикл, в котором он пытается получить данные из сокета. Я установил обработчик сигнала, но похоже, что моя программа не ловит сигнал. Вот мой код:
import signal
import multiprocessing
def newBreakHandler(signum, frame):
global progBreak
progBreak = True
def runMain():
client = multiprocessing.Client(<address>)
# ......
# Insert break handler
signal.signal(signal.SIGINT, newBreakHandler)
while not progBreak:
try:
# Some other stuff...
# ...
childProc = multiprocessing.Process(target=childProcName)
childProc.start()
# Main loop
while not progBreak:
command = client.recv_bytes()
except:
pass
print "Exiting..."
Проблема в том, что всякий раз, когда я отправляю:
kill -2 <PID>
Я никогда не вижу напечатанного текста «Выход», а PID не убит. Я думаю, это потому, что внутренний цикл "пока" занят ожиданием новых данных от клиента, но если клиент не отправляет новые данные.
Есть ли способ решить проблему?
ТИА!!!
while not procBreak: ...
не блокирует внешний цикл? - person bakatrouble   schedule 11.07.2017