22

プロセス停止時にコードの一部(状態保存)を実行する必要があります-それ自体、ユーザー、タスクマネージャーなど。

出来ますか?

try {} finally {}、、、デストラクタ、..次に何を試してみますかAppDomain.ProcessExitIDisposable

4

4 に答える 4

18

他の人が指摘しているように、アプリケーションがまたはKilledによって実行されている場合、アプリケーションでコードを実行する方法はありません。それが と呼ばれる理由です。Operating SystemUserKilling

状態の保存がアプリケーションの重要な部分である場合は、データベース システムに似たアプローチを取る必要があります。実装transaction log、作成checkpointsなど。これが最も近いものです。

その場合、アプリケーションが復活したとき (実行後に再実行されたとき)、保留中の更新や最後の状態の変更がないかkilledどうかを確認できます。transaction logs

それ以外は、あなたが何をしたいかによって異なります。また、なぜこのアイデアを思いついたのですか?詳細を入手できますか?ここの誰かがより良い代替手段を持っているかもしれません。

于 2010-12-18T19:45:32.227 に答える
11

プロセスが不当に強制終了されることの全体的なポイントは、それが実行していることを停止することです。私はそれを回避する方法が本当に見えません。

于 2010-12-18T19:57:12.773 に答える
3

プログラムが終了する理由を考える必要があります。エラーが原因である場合は、try/catch を使用できます。Unix の用語では、プロセス マネージャがプロセスを停止するときに行われるのは、プロセスが終了する前にプログラムが何もできないようにするキル (つまり、SIGKILL シグナルの送信) です。多くのウイルスが行うことは、2 つのプロセス (おそらく、一定のデータ同期を回避するために共有メモリを使用) を持ち、それぞれが他方の状態を監視し、一方がダウンすると他方が再生成します。おそらく、2 番目のプロセスが同様の方法で状態を監視して保存することができます。ただし、他の種類のシグナルは SIGTERM です。このシグナルは、コンピューターを再起動するように指示したが、実行中のプロセスがある場合に送信されます。カーネルは、プログラムが独自に試行して終了することを許可しますが、最終的には、プログラムを強制終了してもよいかどうかをユーザーに尋ねます。SIGTERM 検索処理シグナルを処理する場合。最終的に、SIGKILL に対して私が知っている唯一の解決策は、2 つのプロセスによる解決策です。

于 2010-12-18T19:39:21.940 に答える