Newsgroup: it.comp.lang.c++
Titolo: Uccidere un processo

Ciao a tutti.
Avrei bisogno di sapere come si uccide un processo in Visual C++, sotto NT
Ho sentito dire che il caso NT č differente da quello Windows.. e ho sentito
anche di alcune librerie (PSAPI, ad esempio), ma non ho trovato alcuna
documentazione.
Inoltre mi chiedo, possibile che non esista qualcosa do piů primitivo ed
immediato, per una funzione cosě importante in un ambiente multitasking?
Saluti

immediato, per una funzione cosě importante in un ambiente multitasking?
"Piu` primitivo e immediato" della primitivissima, immediatissima
TerminateProcess?!?!?!  Mi chiedo, onestamente, cosa si potrebbe
prenderere di piu` _brutale_!  "MassacreProcess" ti andrebbe...?-)
Anzi, TerminateProcess, come la system call kill sotto Unix, e` FIN
TROPPO "primitiva e immediata": non offrendo nessuna chance al
processo ucciso di gestire la propria terminazione (in Unix, cio` si
applica solo se il "segnale" mandato da kill e` appunto di quelli non
intercettabili da parte del processo-vittima), puo` rischiare di
lasciare qualche risorsa (file, database, DLL, ecc) in una situazione
"non corretta".  La documentazione in linea dice "usare solo in
circostanze estreme", e mi sembra sacrosanto... similmente, il
task manager di NT, interattivamente, avverte che terminare un
processo rischia di lasciare tutto il sistema in una situazione non
stabile/corretta.
Chiamare una simile "terminazione con estremo pregiudizio" una
"funzione cosi` importante in un ambiente multitasking", e` come
(cfr Hayek, "Liberalismo", Enciclopedia Einaudi) asserire che "_IL_
ruolo cruciale dello Stato e` quello di uccidere chi allo Stato stesso
si oppone" -- VERO, in un certo senso (da Hobbes in qua, anzi, da
Macchiavelli in qua, chi potrebbe in fondo negarlo!-), ma, quanto
a me, non credo che voterei per un politico che ne facesse la
propria bandiera -- e` _vero_ che "il potere nasce dalla bocca
del fucile" (Mao -- perfettamente in linea con il liberale Hayek, il
teorico dell'assolutismo Hobbes, il super-pragmatico Macchiavelli),
ma, siamo proprio sicuri di volere dedurre da questo le linee basi
dell'azione politica...?-).
99% delle volte, i dissidi politici si possono risolvere senza fucili
o peggio; e similmente, 99% delle volte, i processi possono essere
tenuti sotto controllo, e interagire fruttuosamente, attraverso altri
meccanismi, piu` morbidi e controllati, che non kill/TerminateProcess.
TerminateProcess e` necessario quando un processo, scritto in modo
errato, e` fuori controllo e non risponde alle "normali, ragionevoli"
richieste di terminare o rimettere in riga la propria attivita`... se no,
rischi di fare il Bava Beccaris della situazione...!-)
Alex

prenderere di piu` _brutale_!  "MassacreProcess" ti andrebbe...?-)
Io invece avrei bisogno di un modo per terminare un processo
"gracefully". Come si fa? Avevo pensato di spedire all' applicazione un
messaggio Alt-F4, ma sicuramente esiste un metodo piu' elegante...
=========================================================
    Christian Prinoth        For replies please remove
 
c.pr...@flashnet.it
     ANTISPAM from the address
=========================================================
     Homepage: 
http://village.flashnet.it/~fn023975/
=========================================================
                     ICQ: #23472797
=========================================================
    PGP Public key available on request - Fingerprint:
    B69F 01B0 5558 9094 55EF  3572 EED1 6F1B DAFF 2853
=========================================================

messaggio Alt-F4, ma sicuramente esiste un metodo piu' elegante...
Normalmente, se cioe` il processo in questione ha una finestra
principale, un approccio "aggraziato" e` quello di inviare un WM_CLOSE
alla finestra principale stessa; di solito, questo termina il processo in
"modo pulito".  E` possibile, pero`, che cio` non accada; ad esempio,
che il processo, in risposta a questa WM_CLOSE, si blocchi con un
dialogo modale in cui chiede all'utente se salvare o abbandonare un
documento modificato.  Se c'e` questo pericolo, si possono provare
altri approcci; ad esempio, agganciare quel processo con Automation
(se, naturalmente, implementa un "Automation Server"!), per guidarlo
con piu` precisione (ciclo sui Documents, metodo Save su quelli
modificati, poi Close su tutti, poi Quit dell'oggetto Application).  Si
possono poi provare trucchi progressivamente ingegnosi/strani a
seconda delle esatte esigenze (agganciare una DLL allo spazio di
indirizzi dell'altro processo, ad esempio, in "hook" su qualche tipo
di evento... brrrr...!!!) -- fino alla "soluzione finale" di Terminate!-)
Alex