Sinal (SIGTERM) não recebido pelo subprocesso no Windows

Eu tenho um servidor que inicia um subprocesso e posso fazer umsend_signal(SIGTERM) o que matará o processo. Mas não graciosamente. Se eu chamar meu subprocesso do shell (ou seja, como um único processo), o manipulador de sinal definido entrará em ação e sairá normalmente.

server.py: (então ... de outro script que eu chamo pela primeira vezstart_app(), e depoisexit_app()

def start_app():
    app = subprocess.Popen("python app.py")

def exit_app():
    p = app.poll()
    if p==None:
        print("Subprocess is alive") # debug
    app.send_signal(signal.SIGTERM)

app.py

def exit_signal_handler(signal, frame):
    print("Terminate signal received")
    app.exit()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    signal.signal(signal.SIGTERM, exit_signal_handler)
    signal.signal(signal.SIGINT, exit_signal_handler)
    sys.exit(app.exec())

Novamente, se eu chamar app.py do shell e enviar umSIGTERMsinal eu recebo um rastroTerminate signal received e o aplicativo é fechado. Mas quando app.py é iniciado pelo servidor e eu chamoexit_app no servidor, recebo um rastreioSubprocess is alive (from server.py) e o aplicativo foi interrompido, mas o sinal não foi capturado no signalhandler do aplicativoexit_signal_handler

EDIT: Parecesend_signal() não envia sinalpara o subprocesso no sentido em que o subprocesso capta o sinal. Ele envia um sinal para que uma ação ocorra no subprocesso:

    def send_signal(self, sig):
        """Send a signal to the process
        """
        if sig == signal.SIGTERM:
            self.terminate()
        elif sig == signal.CTRL_C_EVENT:
            os.kill(self.pid, signal.CTRL_C_EVENT)
        elif sig == signal.CTRL_BREAK_EVENT:
            os.kill(self.pid, signal.CTRL_BREAK_EVENT)
        else:
            raise ValueError("Unsupported signal: {}".format(sig))

Provavelmente isso responde à minha pergunta, mas deixo em aberto ...

questionAnswers(1)

yourAnswerToTheQuestion