PDA

Visualizza la versione completa : [C++] Riconoscere un processo in crash


seottell
22-10-2008, 08:48
Ciao a tutti,
c'è qualcuno che mi sa indicare come riconoscere da programma un processo crashato ??

ho un server dove girano applicazioni da me fatte anche sottoforma di servizi di NT.
Essendo però un server, nessuno ha il desktop sott'occhio.

avrei quindi la necessità di monitorare l'attività dei vari processi ed eventualmente inviare una mail in caso si verifichi qualche crash.

grazie in anticipo per le risposte...

oregon
22-10-2008, 08:58
Non c'e' alcun modo, a meno di non monitorare i servizi stessi.

Ad esempio, se un servizio ti risponde su un socket, prova ad interrogarlo periodicamente e, se non risponde, lo dai per "crashato".

seottell
22-10-2008, 09:12
Originariamente inviato da oregon
Non c'e' alcun modo, a meno di non monitorare i servizi stessi.

Ad esempio, se un servizio ti risponde su un socket, prova ad interrogarlo periodicamente e, se non risponde, lo dai per "crashato".


:cry: Allora sono praticamente fregato, in quanto i servizi in questione non sono applicazioni server che restano in ascolto di connessione su una porta...
Al contrario... le applicazioni in questione sono da considerare client, infatti contattano continuamente un AS400 per eseguire delle elaborazioni a tempo... (ogni pochi secondi).

Sono già riuscito a fare una applicazione che verifica la lista dei processi attivi in locale ad una macchina, il problema però è che se un processo crasha, comunque risulta ancora attivo finchè qualcuno non preme il tasto OK della finestra d'errore emessa a video. :cry:

pallinopinco
22-10-2008, 09:23
In realtà un metodo ci sarebbe, ma richiede un po' di conoscenze per essere implementato. Quando un programma va in crash Windows richiama il debugger Just-In-Time definito... Quindi ti "basterebbe" sviluppare un'applicazione che si comporti come un debugger JIT limitandoti a rilevare il nome dell'applicazione crashata.

oregon
22-10-2008, 09:37
A parte il fatto che costruire l'applicazione debugger (che a sua volta chiami il debugger vero per eventi che non le interessano) non e' semplicissimo, mi sembra che si possa ovviare piu' semplicemente facendo scrivere al processo un file locale con data e orario.

Se si dovesse rilevare un file con dati piu' vecchi di quelli consentiti, si potrebbe ritenere il processo "crashato".

Loading