robrock80 (Normal User)
Pro
Messaggi: 143
Iscritto: 11/12/2006
|
Salve a tutti. In Windows esiste un modo per intercettare da parte del processo stesso la sua chiusura?
Ossia c'è un modo per lanciare una funzione da parte del processo stesso qualora venisse killato?
Ultima modifica effettuata da robrock80 il 16/03/2010 alle 22:47 |
|
TheKaneB (Member)
Guru^2
Messaggi: 1792
Iscritto: 26/06/2009
|
si può fare, si può fare...
Spiegazione lunga:
http://msdn.microsoft.com/it-it/library/xdkz3x12.aspx
Spiegazione breve:
riassumendo, crei una funzione che funge da handler, e la "registri" come handler personalizzato per la gestione del segnale di terminazione ( SIGTERM )
Codice sorgente - presumibilmente C++ |
#include <stdio.h> #include <signal.h> // Questa funzione sarà "magicamente" chiamata dall'OS void funzioneStrafica(int segnale) { if ( segnale == SIGTERM ) { printf("Figata, mi stanno chiudendo!\n"); exit(0); } } int main() { // Installo un handler per il segnale di chiusura, // Passo alla funzione l'identificatore del segnale che mi interessa (SIGTERM) // e anche il puntatore alla funzione che deve essere chiamata (funzioneStrafica) signal( SIGTERM, funzioneStrafica ); while (1) ; // Loop infinito, perchè in fondo, a me, me piace... return 0; }
|
PS: Non ho provato il codice, ma dovrebbe andare
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6384
Iscritto: 03/01/2010
|
The SIGILL and SIGTERM signals are not generated under Windows.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
robrock80 (Normal User)
Pro
Messaggi: 143
Iscritto: 11/12/2006
|
Postato originariamente da nessuno:
The SIGILL and SIGTERM signals are not generated under Windows. |
... They are included for ANSI compatibility. Thus you can set signal handlers for these signals with signal, and you can also explicitly generate these signals by calling raise.
Non riesco a capire il continuo (preso su MSDN) della riga che tu hai scritto (Maledetto inglese) Ultima modifica effettuata da robrock80 il 17/03/2010 alle 11:01 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6384
Iscritto: 03/01/2010
|
Non puoi usare quei segnali perchè non sono generati da Windows. Per compatibilità, puoi indicare nel tuo codice delle funzioni che le gestiscano e puoi esplicitamente generare i segnali chiamando la raise.
In pratica, non funzionerà se chiudi un processo dal task manager.
Per individuare la chiusura di un processo, mi sa che l'unico modo è effettuare un hooking della API TerminateProcess (una sorta di detours) ... ma non è affatto una cosa semplice.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
robrock80 (Normal User)
Pro
Messaggi: 143
Iscritto: 11/12/2006
|
|
|
nessuno (Normal User)
Guru^2
Messaggi: 6384
Iscritto: 03/01/2010
|
Sì ... potrebbe ma
1) il lavoro potrebbe rivelarsi complesso, più di quanto appare nell'articolo ...
2) questo tipo di approccio potrebbe essere individuato come "malvagio" da parte di antivirus ...
3) probabilmente ti basta un metodo più semplice ...
Pensavo ad un processo "sentinella" avviato dal processo principale. Potrebbero "sorvegliarsi" a vicenda (a tempo) in modo che uno riavvii l'altro quando non lo trova.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|
robrock80 (Normal User)
Pro
Messaggi: 143
Iscritto: 11/12/2006
|
... Avevo pensato anche io alla soluzione di un handler al processo, ma se riesco a renderlo autonomo è meglio. Stò leggendo l'articolo ed è un pò complicato: io ci provo...
Ti ringrazio per l'attenzione dedicata fino ad ora e se riesci a scoprire qualcosa al riguardo (o se decidi di cimentartici) fammi sapere.
Ultima modifica effettuata da robrock80 il 17/03/2010 alle 11:52 |
|
nessuno (Normal User)
Guru^2
Messaggi: 6384
Iscritto: 03/01/2010
|
Postato originariamente da robrock80:
Stò leggendo l'articolo ed è un pò complicato: io ci provo...
|
Tieni presente che è una soluzione "fortemente" dipendente dalla versione del sistema operativo ... (potresti avere problemi non solo se passi da XP a Win7, ma anche tra release diverse dello stesso sistema, che so, tra XP SP2 e XP SP3 ...)
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità. |
|