問題タブ [exit-handler]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - ATL アプリケーションを正常にシャットダウンする
コンソール ATL アプリケーションを開発しましたが、close?、exit?、terminate? をトラップしたいと考えています。ログ ファイルを閉じて、終了時に一般的なクリーンアップを実行できるようにします。
誰かがタスク マネージャーで .exe を終了した結果発生する「終了」イベントをトラップするにはどうすればよいですか?
編集:
これはコンソール アプリケーションです。メイン クラスを追加しました。をどこでどのように使用すればよいか教えていただけますSetConsoleCtrlHandler
か?
events - Application.ApplicationExit イベントは、Winforms 以外のアプリで終了を通知するように機能しますか?
アプリケーションの終了時に、コード ライブラリに通知する必要があります。したがって、System.Window.Forms.Application.ApplicationExit イベントをサブスクライブしました。これは Winforms アプリではうまく機能しますが、コンソール アプリ、サービス、Web アプリ (ASP.NET など) などの他の種類のアプリケーションでも機能しますか? 名前空間はそうではないことを示唆し、Application.Exit()
(明示的または暗黙的に) が呼び出されたときに発生する可能性があり、これらの他のケースを呼び出すのは正しくない可能性があります。
これらの他のケースでより良いイベント、またはより普遍的なイベントがありますか (Winforms でも機能する場合)。たとえば、Environment.Exit()
(コンソール アプリ) が呼び出されたときのイベントはありますか?
System.Diagnostic.Process で Exited イベントに関する記述を見つけましたが、これは別のプロセスの終了を監視するためのもののようであり、それ自体に関するプロセス (たとえば、Process.GetCurrentProcess().Exited += Process_Exited; Process.GetCurrentProcess().EnableRaisingEvents = true;
) によって受信されたようには見えません。プロセスが実際に終了した後にのみ発生する可能性があるため、機能しないと思います。
これは、特に .NET 2.0 および C# に当てはまります。
.net - F#アプリケーションの出口ハンドラーを作成するにはどうすればよいですか?
被験者はそれをすべて言います。
アプリケーションがたとえば^Cで終了した場合に、コードを実行したいと思います。
linux - ファイルを削除しない予期スクリプトの終了ハンドラー
私が書いている期待スクリプトに問題があります。スクリプトの目的は、パートナーに SSH で接続し、ネットワーク構成情報を取得することです。その情報はファイルに保存され、処理のためにローカル ホストにコピーされます。ファイルは、終了時にリモート ホストから削除されます。
通常の状態では、すべてがうまく機能し、期待どおりです。ただし、ユーザーが ^C を押して SCP プロセス中にスクリプトを中断した場合、ファイルはリモート ホストから削除されません。そこに残されています。これがなぜなのか、強制的に削除する方法がわかりません。このような場合にシグナル ハンドラーと終了ハンドラーをステップ実行すると、何らかの理由で終了ハンドラーがファイルの存在を認識せず、if ステートメントをスキップするように見えます。理由はわかりませんが。
以下のスクリプトから終了ハンドラーとシグナルハンドラーをコピーしました。何かアイデアがある場合、または明らかなエラーが見られる場合はお知らせください。ここからどこへ行けばいいのかわからない。
更新: Dinesh が提案した方法を試しましたが、まだ問題があります。終了ハンドラー コードを次のように更新しました。 exit -onexit { exp_internal 1 unset expect_out(buffer)
}
これを機能させる唯一の方法は、生成された PID を強制終了するループのシグナル ハンドラをコメント アウトすることでした。コメントを外すと、終了ハンドラーはタイムアウトを期待します。
いずれにせよ、ファイルはまだリモート システムから削除されません。これは私が exp_internal 1 から見たものです:
更新 2:
終了ハンドラーを次のように更新しました。
これはデバッグ情報です - まだファイルは削除されていません。