Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Intercettare chiusura processo
Forum - C/C++ - Intercettare chiusura processo

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
robrock80 (Normal User)
Pro


Messaggi: 143
Iscritto: 11/12/2006

Segnala al moderatore
Postato alle 22:40
Martedì, 16/03/2010
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


Nel mondo ci sono 10 tipi di persone: quelle che capiscono il binario e quelle che non lo capiscono
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1787
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 1:02
Mercoledì, 17/03/2010
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++

  1. #include <stdio.h>
  2. #include <signal.h>
  3.  
  4. // Questa funzione sarà "magicamente" chiamata dall'OS
  5. void funzioneStrafica(int segnale)
  6. {
  7.   if ( segnale == SIGTERM )
  8.   {
  9.     printf("Figata, mi stanno chiudendo!\n");
  10.     exit(0);
  11.   }
  12. }
  13.  
  14. int main()
  15. {
  16.   // Installo un handler per il segnale di chiusura,
  17.   // Passo alla funzione l'identificatore del segnale che mi interessa (SIGTERM)
  18.   // e anche il puntatore alla funzione che deve essere chiamata (funzioneStrafica)
  19.   signal( SIGTERM, funzioneStrafica );
  20.  
  21.   while (1) ; // Loop infinito, perchè in fondo, a me, me piace...
  22.  
  23.   return 0;
  24. }



PS: Non ho provato il codice, ma dovrebbe andare ;)


Software Failure: Guru Meditation
Forum su Informatica, Elettronica, Robotica e Tecnologia: http://www.nonsoloamiga.com
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 9:58
Mercoledì, 17/03/2010
The SIGILL and SIGTERM signals are not generated under Windows.


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
PM Quote
Avatar
robrock80 (Normal User)
Pro


Messaggi: 143
Iscritto: 11/12/2006

Segnala al moderatore
Postato alle 10:58
Mercoledì, 17/03/2010
Testo quotato

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


Nel mondo ci sono 10 tipi di persone: quelle che capiscono il binario e quelle che non lo capiscono
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:29
Mercoledì, 17/03/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 ...
PM Quote
Avatar
robrock80 (Normal User)
Pro


Messaggi: 143
Iscritto: 11/12/2006

Segnala al moderatore
Postato alle 11:38
Mercoledì, 17/03/2010
Ho trovato questo,

http://www.codeproject.com/KB/DLL/funapihook.aspx

prima che lo inizio a studiare, pensi che mi possa aiutare?


Nel mondo ci sono 10 tipi di persone: quelle che capiscono il binario e quelle che non lo capiscono
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 11:44
Mercoledì, 17/03/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 ...
PM Quote
Avatar
robrock80 (Normal User)
Pro


Messaggi: 143
Iscritto: 11/12/2006

Segnala al moderatore
Postato alle 11:50
Mercoledì, 17/03/2010
... 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


Nel mondo ci sono 10 tipi di persone: quelle che capiscono il binario e quelle che non lo capiscono
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 5475
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 12:09
Mercoledì, 17/03/2010
Testo quotato

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 ...
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo