Pregunta

necesito para ejecutar una parte del código (el estado de ahorro) en el proceso de detener -. Por sí mismo, por el usuario, mediante el administrador de tareas, etc.

¿Es posible?

try {} finally {}, AppDomain.ProcessExit, IDisposable, destructor, .. lo siguiente para probar?

¿Fue útil?

Solución

Como otros han apuntado a cabo, no hay manera que puede ejecutar cualquier código en su aplicación cuando se está Killed por Operating System o User. Es por eso que su llamado Killing.

Si guardar el estado es una parte importante de su solicitud, usted debe tomar un enfoque similar al de un sistema de base de datos. La implementación de transaction log, creando checkpoints, etc. Eso es lo más cercano que puede obtener.

En ese caso, cuando sus revive la aplicación (se vuelve a ejecutar después de haber sido killed), se puede comprobar estos transaction logs para todas las actualizaciones pendientes o cambios de última estatales.

Aparte de eso, lo que realmente depende de lo que quiere hacer. Y también por qué se le ocurrió esta idea? Podemos obtener más detalles? Puede ser alguien de aquí tiene una mejor alternativa.

Otros consejos

El objetivo de un ser matado proceso sin gracia es que sólo se detiene lo que está haciendo. Realmente no puedo ver una forma de evitar eso.

Es necesario pensar acerca de por qué su programa está saliendo. Si es debido a un error, entonces se puede usar try / catch. En términos de Unix, lo que sucede cuando las paradas gestor de procesos es un proceso de una muerte (es decir, envía una señal SIGKILL), que No permite el programa para hacer algo antes de que se salga del proceso. Lo que muchos virus hacer es tener dos procesos (posiblemente con memoria compartida para evitar la sincronización de datos constante), cada uno de monitorizar el estado de la otra y cuando uno se cae, el otro reapariciones de TI. Tal vez un segundo proceso podría vigilar y guardar el estado de una manera similar para su caso. El otro tipo de señal, aunque es un SIGTERM. Esta señal se envía cuando le dice a su equipo para reiniciar pero hay procesos en ejecución. El kernel permite que los programas para tratar de dejar de fumar por su cuenta, pero con el tiempo le preguntará al usuario si está bien para matar el programa. Si desea gestionar las operaciones de búsqueda SIGTERM manejo de señales. En última instancia, la única solución que conozco a la SIGKILL es la solución de los dos procesos.

Me miraba a su alrededor por una razón algo diferente de lo que se publica, pero se le ocurrió una solución bastante buena para mí y que podría útil indicar aquí:

NOTA:. Para los que saben lo que es, esto es esencialmente el patrón de diseño 'Heartbeat'

1) Además del código que se ejecuta que voluntad 'die' (es decir, matar), el código de añadir a este proyecto de tal manera que genera un subproceso (o posiblemente otro método?) En la inicialización, y todo el hilo hace es corrida un interminable bucle while (pero asegúrese de que duerme al menos unos pocos segundos o incluso de 1 minuto entre iteraciones) y en el bucle while, grabar un indicador para indicar que su aplicación es 'vivo' (es decir, el 'latido del corazón'). Yo personalmente recomiendo el establecimiento de un valor en la base de datos, o tal vez un archivo, que es la fecha y hora actual (es decir, DateTime.Now)

2) Ahora que está grabando el 'latido del corazón', crear otra aplicación (es decir, otro proceso) que no hace nada, pero lee el valor de latido (es decir, la fecha y hora actual) y lo hace en un interminable bucle while. Una vez que su determinaron que el valor de latido es 'malo' (es decir, puede que si, por ejemplo, HeartBeatTimestamp + 5 min

Espero que esto ayude :) No dude en para investigar el patrón de diseño 'Heartbeat' de otros recursos que si quieres saber más!

Saludos,

Jeff

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top