問題タブ [termination]

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 投票する
12 に答える
1843555 参照

python - スクリプトを終了するには?

die()スクリプトを早期に終了する PHPのコマンドを認識しています。

Pythonでこれを行うにはどうすればよいですか?

0 投票する
6 に答える
13900 参照

wcf - アプリケーションの終了時に IsOneWay=true のメソッドに対して WCF で何が起こるか

サービスの進行状況を時々通知するクライアント アプリケーションがあります。サービスへのメソッド呼び出しは、IsOneWay=true でマークされています。これは、通知に戻り値が必要なく、遅延させたくないためです。

クライアントはサービスにエラーを通知し、その後終了します。

問題は、メッセージを送信した後、一方向のメソッド呼び出しが呼び出し元のコードに戻るかどうかです。または、メッセージをキューに入れ、後で別のスレッドによって送信されますか?

2 つのプロセス (クライアントとサービス) は同じマシン上にありますが、(マシンが過負荷になっていると) サービスがエラー通知を受け取れないことがあります。私が言及した 2 番目のオプションが発生すると思われますが、よくわかりません。

私が正しければ、通知が送信されていることを確認し、メソッドを一方向に保つにはどうすればよいですか?

0 投票する
8 に答える
6272 参照

c++ - プログラム終了時のファイル削除の保証 (C/C++)

Win32にCreateFileは がありますFILE_FLAG_DELETE_ON_CLOSEが、私は Linux を使用しています。

プログラムの終了時に常に削除される一時ファイルを開きたいです。プログラムがクラッシュした場合、これを保証するのは現実的ではないかもしれないことは理解できましたが、それ以外の場合は動作させたいと思っています。

私はRAIについて知っています。信号については知っています。について知っていatexit(3)ます。ファイルを開いてすぐに削除できることはわかっていますが、ファイル記述子が閉じられるまで (クラッシュを処理することさえあります)、ファイルは引き続きアクセス可能です。これらのどれも完全で簡単な解決策のようには見えません:

  1. RAII: 行ったこと: デストラクタがファイルを削除するオブジェクトがありますが、プログラムがシグナルによって終了された場合、デストラクタは呼び出されません。
  2. シグナル: シグナル ハンドラーの登録をトリッキーな命題にする低レベルのライブラリを作成しています。たとえば、アプリケーションがシグナル自体を使用する場合はどうなるでしょうか。つま先を踏みたくない。対処するために を巧妙に使用することを検討するかもしれませんsigaction(2)が、この可能性についてはまだ十分に考えていません。
  3. atexit(3): 異常終了時に呼び出されないため (たとえば、シグナルを介して)、明らかに役に立たない。
  4. preemptive unlink(2): ファイルをファイル システムに表示したままにしておく必要があることを除けば、これは非常に優れています (そうしないと、システムの監視やトラブルシューティングが難しくなります)。

ここで何をしますか?

詳細説明

元の投稿で 1 つの詳細を省略しましたが、含める必要があったことに今気づきました。この場合の「ファイル」は、厳密には通常のファイルではなく、POSIX メッセージ キューです。経由で作成しmq_open()ます。mq_close()orで閉じることができますclose()(前者は私のシステムでは後者のエイリアスです)。経由でシステムから削除できますmq_unlink()。ファイルが存在するディレクトリを選択できないことを除いて、これらすべてが通常のファイルに似ています。/tmp「ファイル」は非常に限られた容量の仮想ファイルシステムでシステムによって作成されるため、これにより、現在最も一般的な回答 (ファイルを に配置する) が機能しなくなります。/dev/mqueue(の例に従って、仮想ファイルシステムを にマウントしましたman mq_overview) 。

これは、名前を表示したままにしておく必要がある理由も説明しています (即時リンク解除アプローチが機能しなくなります)。「ファイル」は 2 つ以上のプロセス間で共有する必要があります。

0 投票する
9 に答える
1246 参照

c++ - 「for ループ」の終了条件は VC++ 6 で更新されますか?

終了条件部分「stlVector.size()」は「stlVector.erase(...)」を考慮していますか?つまり、 stlVector. size() はループの繰り返しごとに更新されますか? 今はテストできないので、ここに質問を投稿しました。

事前にt​​hx!

よろしくお願いします、

正統派

0 投票する
5 に答える
7136 参照

c# - C# で永続的なスレッドをクリーンアップする適切な方法

スレッドをカプセル化するタイムラインというオブジェクトがあります。イベントはタイムラインでスケジュールできます。スレッドは、イベントを実行する時間になるまで待機し、それを実行し、スリープに戻ります ((a) 次のイベントに到達するまでの時間、または (b) イベントがなくなった場合は無期限に)。

スリープは WaitEventHandle で処理されます。これは、イベントのリストが変更されたとき (スリープ遅延を調整する必要があるため)、またはスレッドを停止する必要があるとき (スレッドが正常に終了できるようにするため) にトリガーされます。

デストラクタは Stop() を呼び出します。IDisposable も実装し、Dispose() も Stop() を呼び出します。

それでも、このコンポーネントをフォーム アプリケーションで使用すると、フォームを閉じるときにアプリケーションが正しくシャットダウンされません。何らかの理由で Stop() が呼び出されないため、.NET がすべてのスレッドの終了を待機することを決定する前に、オブジェクトのデストラクタがトリガーされず、Dispose() メソッドが呼び出されません。

解決策は、FormClose イベントで明示的に Dispose() を自分で呼び出すことだと思いますが、このクラスはライブラリにあり、実際にはより深いレイヤーであるため (つまり、アプリケーション開発者はタイムラインを実際に見ることはありません)クラス)、これは非常に見苦しく、アプリケーション開発者にとって余分な (不必要な) 落とし穴のようです。リソースの解放が問題になったときに通常使用する using() 句は、これが長寿命のオブジェクトになるため適用されません。

一方では、.NET がガベージ コレクションの最終ラウンドを実行する前に、すべてのスレッドが終了するのを待ちたいと思うことは理解できますが、この場合、非常に厄介な状況が生じます。

ライブラリのコンシューマーに要件を追加せずに、スレッド自体を適切にクリーンアップするにはどうすればよいですか? 別の言い方をすれば、アプリケーションが終了するときに、すべてのスレッドが終了するのを待つ前に、.NET がオブジェクトに通知するようにするにはどうすればよいでしょうか?


編集:クライアントプログラムがスレッドを認識しても問題ないと言っている人々に応えて:私は丁重に反対します。

元の投稿で述べたように、スレッドは別のオブジェクト (アニメーター) に隠されています。別のオブジェクトのアニメーターをインスタンス化し、「このライトを 800 ミリ秒点滅させる」などのアニメーションを実行するように指示します。

Animator オブジェクトの消費者として、Animator がライトが正確に 800 ミリ秒点滅することを確認する方法は気にしません。スレッドを開始しますか?私は気にしない。非表示のウィンドウを作成し、システム タイマー (ew) を使用しますか? 私は気にしない。明かりを点けたり消したりするために小人を雇いますか?私は気にしない。

そして、アニメーターを作成した場合、他のすべてのオブジェクトとは対照的に、プログラムの終了時にそれを追跡し、特別なメソッドを呼び出す必要があることを特に気にする必要はありません。ライブラリの消費者ではなく、ライブラリの実装者が関心を持つべきです。


編集:コードは実際には表示するのに十分短いです。リストにイベントを追加するメソッドはありません。参照用に含めます。

0 投票する
6 に答える
4353 参照

java - Java プログラムの異常終了の処理

データベース接続を開く Java アプリケーションがあるとします。通常であれば、finally ブロックに connection.close() を追加しますが、このブロックは kill 操作やその他の異常終了の場合には実行されませんよね? アプリケーションが終了する前に接続を適切に閉じるために、プログラマーとしてできるその他の予防策はありますか?

0 投票する
7 に答える
15510 参照

.net - Process.GetCurrentProcess().Kill() を使用して WinForm アプリケーションを終了してはいけないのはなぜですか?

現在、ユーザーがアプリケーションを終了したい場合、必要ないくつかのこと (サーバーからの切断、ユーザー データの保存など) を行ってから、次のことを行います。

  • ブール値を使用してすべてのメインループを終了します
  • まだ実行中のスレッドを中止します (通常、サーバーのポーリング スレッド)
  • Application.Exit(); を呼び出してください。

これは終了するのに数秒かかり、実際の目的には役立ちません (すべてがサーバーに既に保存されているため、そこで何が起こるかはあまり気にしません)。

代わりにこれを使用すると、考えられる欠点なしで即座に終了しました。

プロセスを終了して、CLR に AppDomain を削除させないのはなぜですか?

共有リソース (IO ファイル ハンドラーなど) を慎重に破棄することが重要であることはわかっています (だから、それに答えないでください:))。

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

windows - Win32 API を使用して (Java) プロセスの終了コードを取得するにはどうすればよいですか?

この JVM を起動した Windows プログラムから JVM 終了コード (呼び出しからの「ステータス」の値: System.exit(status)) を取得するにはどうすればよいですか? ShellExecute() 呼び出しの結果を使用しようとしましたが、結果 (42) はステータスの実際の値とは無関係でした。

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

process - spawnvを使用して作成されたプロセスを終了します

私はプロセスの経験がまったくありませんが、私が設定していることは本当に単純なはずです。私がするのは、次のようなプロセスを生成することだけです。

さて、私がやりたいのは、一定時間後にこのプログラムを強制終了することです。ただし、返されるspawnIdは、たとえばを呼び出すときに必要なものではありませんtaskkill /PID [number] /F

使用してみましotherId2 = GetWindowThreadProcessId((HWND)spawnId,OUT otherId1)たが、どちらもotherId1正しいotherId2PIDを指定していません。

誰かが彼と一緒に私を助けることができれば、私はさまざまに感謝するでしょう。よろしく、ロアルド

0 投票する
7 に答える
15022 参照

c - プログラムの終了を検出する(C、Windows)

終了する前に特定のタスクを実行する必要があるプログラムがあります。問題は、プログラムが例外(データベースに到達できないなど)でクラッシュすることがあることです。さて、異常終了を検出し、それが死ぬ前にいくつかのコードを実行する方法はありますか?

ありがとう。

コードをいただければ幸いです。