Подтвердить что ты не робот

Выполнение гарантийного кода даже при сбое процесса

Мне нужно выполнить часть кода (сохранение состояния) при остановке процесса - сам по себе, пользователем, диспетчером задач и т.д.

Возможно ли это?

try {} finally {}, AppDomain.ProcessExit, IDisposable, деструктор,.. что после попробовать?

4b9b3361

Ответ 1

Как указывали другие, вы не можете выполнить какой-либо код в своем приложении, когда он Killed на Operating System или User. Вот почему его называют Killing.

Если сохранение состояния является важной частью вашего приложения, вы должны использовать подход, похожий на систему базы данных. Реализация transaction log, создание checkpoints и т.д. Это самое близкое, что вы можете получить.

В этом случае, когда ваше приложение восстанавливается (повторно запускается после Killed), он может проверить эти transaction logs на наличие ожидающих обновлений или последних изменений состояния.

Кроме этого, это действительно зависит от того, что вы хотите сделать. А также почему вы придумали эту идею? Можем ли мы получить более подробную информацию? Может быть, у кого-то есть лучшая альтернатива.

Ответ 2

Вся суть процесса, который был убит несправедливо, заключается в том, что он просто останавливает то, что он делает. Я не могу понять, как это сделать.

Ответ 3

Вам нужно подумать о том, почему ваша программа выходит. Если это из-за ошибки, вы можете использовать try/catch. В терминах unix то, что происходит, когда диспетчер процессов останавливает процесс, является убийством (т.е. Отправляет сигнал SIGKILL), который не позволяет программе ничего делать до выхода процесса. У многих вирусов есть два процесса (возможно, с разделяемой памятью, чтобы избежать постоянной синхронизации данных), каждый из которых контролирует состояние другого, а когда один идет вниз, другой респанит его. Возможно, второй процесс может контролировать и сохранять состояние аналогичным образом для вашего случая. Другим видом сигнала является SIGTERM. Этот сигнал отправляется, когда вы сообщаете компьютеру перезагружаться, но выполняются процессы. Ядро позволяет программам попробовать и выйти самостоятельно, но в конечном итоге спросит пользователя, можно ли убить программу. Если вы хотите обрабатывать сигналы обработки запросов SIGTERM. В конечном итоге единственным решением, которое я знаю в SIGKILL, является два технологических решения.