Ho un'applicazione A che mi piacerebbe poter richiamare altri processi arbitrari come specificato da un utente in un file di configurazione.Eseguire sottoprocessi arbitrari su Windows e terminare ancora in modo pulito?
Lo script B di batch è un processo di questo tipo che un utente vorrebbe essere richiamato da A. B imposta alcune variabili di ambiente, mostra alcuni messaggi e invoca un compilatore C per eseguire alcuni lavori.
Windows fornisce un modo standard per terminare in modo pulito i processi arbitrari? Supponiamo che A venga eseguito in una console e riceve un CTRL + C. Può passare questo a B e C? Supponiamo che A venga eseguito in una finestra e che l'utente provi a chiudere la finestra, può annullare B e C?
TerminateProcess è un'opzione, ma non molto buona. Se A utilizza TerminateProcess su B, C continua a essere in esecuzione. Questo potrebbe causare problemi se C è di lunga durata, dato che potremmo avviare un'altra istanza di C per operare sugli stessi file mentre la prima istanza di C è ancora segretamente al lavoro. Inoltre, TerminateProcess non risulta in un'uscita pulita.
GenerateConsoleCtrlEvent suona bene, e potrebbe funzionare quando tutto è in esecuzione in una console, ma la documentazione dice che è possibile inviare CTRL + C alla propria console, quindi non sarebbe di aiuto se A fosse in esecuzione in una finestra.
C'è qualche equivalente a SIGINT su Windows? Mi piacerebbe trovare un articolo come questo: http://www.cons.org/cracauer/sigint.html per Windows.
+1 per una buona domanda. Divertente non ci sono state risposte ... Non sono a conoscenza di un meccanismo simile a un segnale in Win32. Quando ho avuto bisogno di notificare i processi figli ho postato un messaggio WM_CLOSE nelle app della GUI. Per le applicazioni della console li ho creati collegando i flussi di input e output all'applicazione principale e quando volevo terminarli ho semplicemente chiuso il flusso di input. Per quanto riguarda i bambini, ecc., Ho fatto affidamento sui miei figli diretti per ripulire le loro dipendenze :). –