問題タブ [terminate]

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

python - スレッドを殺す方法はありますか?

フラグ/セマフォなどを設定/チェックせずに実行中のスレッドを終了することは可能ですか?

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

.net - .NETプロセス/スレッドが予期せず終了する原因は何ですか?

main()メソッドがtry ... catch句で保護されているにもかかわらず、.NETプロセスまたはスレッドが終了する理由の完全なリストを収集しようとしています。

そのような理由の1つは、Thread.Abort()です(Thread.ResetAbortを呼び出さない限り)。もっと理由を知っていますか?

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

bash - bashスクリプトからCygwin bashでスクリプトのプロセスツリーを終了する方法

特定の条件下で、特に特定のファイルが作成された後に、監視して終了する必要がある Cygwin bash スクリプトがあります。ただし、Ctrl + Cと同じレベルの完全性でスクリプトを正確に終了する方法を理解するのは困難です。

test1以下は、終了するのを待つだけの簡単なスクリプト ( と呼ばれる) です。

このスクリプトがフォアグラウンドで実行される場合、Ctrl+C はtailとスクリプト自体の両方を終了します。スクリプトがバックグラウンドで実行されている場合、kill %1(ジョブ 1 であると仮定して) もtailとスクリプトの両方を終了します。

ただし、スクリプトから同じことを実行しようとすると、スクリプトをbash実行しているプロセスのみが終了tailし、親から切断されたままになっていることがわかります。これが私が試した1つの方法です(test2):

これが実行されると、バックグラウンドで実行されている bash サブシェルは正常に終了しますが、tailまだハングアップします。

このように、明示的に別のスクリプトを使用しても、まだ機能しません ( test3):

tailこのスクリプトが実行された後もまだぶらぶらしています。

私の実際のケースでは、ファイルを作成するプロセスは特に計測可能ではないため、自然に終了させることはできません。ただし、特定のファイルがいつ作成されたかを調べることで、その時点でそのファイルを終了しても問題ないことを知ることができます。残念ながら、killall複数のインスタンスが実行されている可能性があり、特定のインスタンスのみを強制終了したいため、シンプルまたは同等のものは使用できません。

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

c++ - TerminateProcess(GetCurrentProcess,0); に相当する Mac OS X。

C++ アプリケーションの Mac ポートを終了するための簡単でキャッチできない方法を探しています。私が使用していたWindowsで

Mac OS X / XCode / GCC で使用できる同等のコマンドは何ですか?

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

c++ - Luaスレッドをきれいに終了するにはどうすればよいですか?

私の状況では、Lua (C) API を使用して、文字列に保持されたスクリプトを実行しています。ユーザーがスクリプトの実行を終了できるようにしたいのですが (スクリプトに無限ループが含まれている場合、これは必須です)、どうすればよいですか?

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

c++ - C++ 終了ハンドラーが Right Thing(TM) になるのはいつですか?

C++ 標準では、実際に呼び出すstd::set_terminate関数を指定できる関数が提供されています。悲惨な状況でのみ呼び出されるべきであり、それが呼び出されたときに標準が説明している状況は悲惨なものです (たとえば、キャッチされていない例外)。呼び出されたときの状況は、メモリ不足に似ているように思えます。賢明にできることはあまりありません。std::terminatestd::terminatestd::terminate

リソースが確実に解放されるようにするために使用できることを読みましたが、ほとんどのリソースでは、プロセスの終了時に OS によって自動的に処理される必要があります (ファイル ハンドルなど)。理論的には、たとえば、クラッシュのために終了するときにサーバーに特定のメッセージを送信する必要がある場合があります。しかし、ほとんどの場合、OS の処理で十分です。

終了ハンドラーを使用するのが正しいこと (TM) はいつですか?

更新:カスタム終了ハンドラーで何ができるかに興味がある人は、この移植性のないトリックが役立つかもしれません。

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

c - プロセス ツリーを終了する (C for Windows)

これは以前に尋ねられましたが、コードで決定的な答えを見つけることができません。

プロセス ProcessA (PID 1234) を開きます。このプロセスは、子プロセス ProcessAB (PID 5678) を開きます。完了したら、ProcessA を終了しますが、まだ ProcessAB が残っています。

プロセスツリー全体を終了するにはどうすればよいですか? つまり、開いたプロセスを終了すると、関連するすべてのプロセスも終了することを確認するにはどうすればよいですか?

ありがとう

コードは大歓迎です。

0 投票する
4 に答える
2373 参照

.net - プログラムが自身のプロセスを終了する正しい方法は何ですか(Windows)

C#.NET 3.5

コンピューター上の別のアプリケーションから呼び出されているコンソールアプリケーションがあります。このコンソールアプリは継続的に実行され、「親」プロセスからstdinのデータをリッスンします。

ただし、親が停止または強制終了された場合、親が起動したコンソールアプリは続行されます。通常の状況では、最小限のリソースを使用して、stdinからの入力を待機してアイドル状態になります。ただし、親がなくなるとすぐに、このコンソールアプリはCPUを急上昇させ、実行中のコアをほぼ100%の使用率で枯渇させます。これは、プロセスを手動で強制終了するまで続きます。

理想的には、呼び出し元の親は、特にこれが通常の(例外ではない)「停止」状態で発生しているため、それ自体の後でクリーンアップします。残念ながら、この親プロセスは私の手に負えません。

私の最初の考えは、コンソールアプリ内から呼び出し元の親を取得し、そのPIDを監視することでした。親プロセスがなくなると、コンソールアプリは自動的に終了します。現在、私はこれを次の方法で行っています。

これは部分的にしか機能しません-CPUスパイクを停止しますが、Sysinternalsのすばらしいプロセスモニターからプロセスを見ると、DW20.exeが実行されていることがわかります-「MicrosoftApplicationErrorReporting」プログラム。そして、それはただ...そこにあり、コンソールアプリはメモリに残ります。

この継続的なCPUスパイクと解放されていないメモリを回避するために、プロセスを正しく終了するには、ここで何をする必要がありますか?最終的に、これは介入なしで実行する必要があります。

PSここでは、WindowsサービスやWebサービスではなく、「長時間実行プログラム」としてコマンドラインアプリケーションを使用しています。親プログラムは、stdinを介してデータを渡すコマンドラインアプリを実行するようにのみ構成できるためです。(好奇心旺盛な人のために、これは外部認証を使用したejabberdです)。

編集:

stdinからの入力を待機するコードは次のとおりです。

その前に、親が終了すると、コンソールアプリがCPUに夢中になります。Visual Studioからデバッガーを接続しましたが、実際には、Console.In.Readの行にまだ配置されています。理論的には、自己監視タイマーがトリガーされ、親がなくなったことを確認すると、他のスレッドがそのRead()行にあるときにSystem.Environment.Exit(0)を試行します。

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

delphi - delphi-アプリケーションを閉じるときにすべてのスレッド(TThread)を終了します

私のアプリケーションはtcp/ipサーバーであり、メインスレッドは1回だけ作成され、常にリッスンしています。新しいクライアントが接続すると、メインスレッドはそのタイプの新しいスレッドを作成しますTClientThread。ただし、実行中のクライアントスレッドのリストはありません。これは、アプリが少し複雑になるためです。スレッドがビジー(私の場合は「ビジー」)であっても、すべてのスレッドで「terminate」メソッドを実行する方法はありますか。タイムアウトセットが約30秒であるデータを待機していることを意味します...したがって、待機せずにとにかくデータを強制終了する必要があります。)?単純なクローズアプリケーションは、スレッドで「終了」メソッドを実行していないようです。これにより、FastMMによってメモリリークが報告されます...