Señal (SIGTERM) no recibida por subproceso en Windows

Tengo un servidor que inicia un subproceso y puedo hacer unsend_signal(SIGTERM) que matará el proceso. Pero no con gracia. Si llamo a mi subproceso desde el shell (es decir, como un solo proceso), el controlador de señal definido se activará y saldrá con gracia.

server.py: (así que ... desde otro script primero llamostart_app(), y despuésexit_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())

Nuevamente, si llamo a app.py desde shell y envío unSIGTERMseñal consigo un rastroTerminate signal received y la aplicación se cierra. Pero cuando el servidor inicia app.py y llamoexit_app en el servidor, obtengo un rastroSubprocess is alive (de server.py) y la aplicación se elimina pero la señal no se detecta en el controlador de señal de la aplicaciónexit_signal_handler

EDITAR: Parecesend_signal() no envía una señala el subproceso en el sentido de que el subproceso capta la señal. Envía una señal para que se realice una acción en el subproceso:

    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))

Esto probablemente responde a mi pregunta, pero la dejaré abierta ...

Respuestas a la pregunta(1)

Su respuesta a la pregunta