問題タブ [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.

0 投票する
3 に答える
1282 参照

c++ - ATL アプリケーションを正常にシャットダウンする

コンソール ATL アプリケーションを開発しましたが、close?、exit?、terminate? をトラップしたいと考えています。ログ ファイルを閉じて、終了時に一般的なクリーンアップを実行できるようにします。

誰かがタスク マネージャーで .exe を終了した結果発生する「終了」イベントをトラップするにはどうすればよいですか?

編集:

これはコンソール アプリケーションです。メイン クラスを追加しました。をどこでどのように使用すればよいか教えていただけますSetConsoleCtrlHandlerか?

0 投票する
1 に答える
4652 参照

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# に当てはまります。

0 投票する
2 に答える
1204 参照

.net - F#アプリケーションの出口ハンドラーを作成するにはどうすればよいですか?

被験者はそれをすべて言います。

アプリケーションがたとえば^Cで終了した場合に、コードを実行したいと思います。

0 投票する
1 に答える
813 参照

linux - ファイルを削除しない予期スクリプトの終了ハンドラー

私が書いている期待スクリプトに問題があります。スクリプトの目的は、パートナーに SSH で接続し、ネットワーク構成情報を取得することです。その情報はファイルに保存され、処理のためにローカル ホストにコピーされます。ファイルは、終了時にリモート ホストから削除されます。

通常の状態では、すべてがうまく機能し、期待どおりです。ただし、ユーザーが ^C を押して SCP プロセス中にスクリプトを中断した場合、ファイルはリモート ホストから削除されません。そこに残されています。これがなぜなのか、強制的に削除する方法がわかりません。このような場合にシグナル ハンドラーと終了ハンドラーをステップ実行すると、何らかの理由で終了ハンドラーがファイルの存在を認識せず、if ステートメントをスキップするように見えます。理由はわかりませんが。

以下のスクリプトから終了ハンドラーとシグナルハンドラーをコピーしました。何かアイデアがある場合、または明らかなエラーが見られる場合はお知らせください。ここからどこへ行けばいいのかわからない。

更新: Dinesh が提案した方法を試しましたが、まだ問題があります。終了ハンドラー コードを次のように更新しました。 exit -onexit { exp_internal 1 unset expect_out(buffer)

}

これを機能させる唯一の方法は、生成された PID を強制終了するループのシグナル ハンドラをコメント アウトすることでした。コメントを外すと、終了ハンドラーはタイムアウトを期待します。

いずれにせよ、ファイルはまだリモート システムから削除されません。これは私が exp_internal 1 から見たものです:

更新 2:

終了ハンドラーを次のように更新しました。

これはデバッグ情報です - まだファイルは削除されていません。