問題タブ [sigint]
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.
perl - 子を含む perl スクリプトに送信された場合、SIGINT (^C) はどうなりますか?
フォークする Perl スクリプトがあります。
各フォークは外部プログラムを実行し、出力を解析して、出力を保存可能なファイルに変換します。
次に、Storable ファイルが親によって読み込まれ、各子からの合計データが分析されてから、前のフォークの繰り返しに進むか、親が停止します。
一部の子がまだ外部プログラムを実行しているときに ^C を発行すると、正確にはどうなりますか? 親の perl スクリプトはフォアグラウンドで呼び出され、フォークしたにもかかわらずフォアグラウンドに残っていたと思います。
SIGINT はすべての子、つまり親、親の子、および子によって呼び出される外部プログラムに渡されますか??
更新:
付け加えておくと、SIGINIT を発行すると、スクリプトの子によって呼び出された外部プログラムがシグナルを認識して終了するように見えます。しかし、子供たち、またはおそらく親プログラムは続けます。これは私にはすべて不明です。
更新 2 :
tchristさんのコメントですが、Perlのsystem()
コマンドで外部プログラムを呼び出します。
実際、tchrist のコメントにも、私が探していた説明が含まれているようです。私のプログラムの動作に基づいてさらにデバッグした後、実際に、SIGINT が親からすべての子に、すべての子からすべての子 (外部プログラム) に渡されているように見えます。
したがって、tchrist のコメントに基づいて、起こっているように見えるのは、CTRL-C が外部プログラムを強制終了し、子プロセスがsystem()
コマンドの外に出てしまうということです。
で呼び出されたものの終了ステータスを子供たちに確認させましたがsystem()
、CTRL-C は、より多くの処理ラウンドの作成につながるのではなく、親から下のすべてを強制終了すると想定していました。 !
解決策(私の問題):
親で SIGINT のシグナルハンドラーを作成するだけです。次に、シグナルハンドラーは SIGTERM を各子に送信し (これにより、子の子にも SIGTERM が送信されると思います)、親を正常に終了させます。このやや明白な解決策で問題が修正される可能性はありますが、Perl での fork に関する SIGINT の動作に関する私の誤解を理解したいと思いました。
c++ - SIGINTに対処する方法は?
プログラムでSIGINTシグナルをキャッチした場合、どうすればリソースを安全にクリーンアップできますか?シグナルハンドラ関数ではdelete
、演算子で作成されたリソースを解放する方法がわからないため、演算子を呼び出すことができませんnew
。
何か案は?
python - Python:サブプロセスがCTRL-C / Control-C/SIGINTを受け取らないようにする方法
私は現在、シェルで実行されている専用サーバーのラッパーに取り組んでいます。ラッパーはサブプロセスを介してサーバープロセスを生成し、その出力を監視して反応します。
専用サーバーには、正常にシャットダウンするコマンドを明示的に指定する必要があります。したがって、CTRL-Cはサーバープロセスに到達してはなりません。
KeyboardInterrupt例外をキャプチャするか、PythonでSIGINTハンドラーを上書きしても、サーバープロセスは引き続きCTRL-Cを受け取り、すぐに停止します。
だから私の質問は:サブプロセスがCTRL-C / Control-C / SIGINTを受け取らないようにする方法は?
erlang - Erlang で SIGINT を処理するにはどうすればよいですか?
I know how to create custom signal handlers in Java, Python, Ruby, Perl, and Lisp, thanks to Google and a plethora of tutorials. I can't find online how to create handlers for SIGINT, SIGTERM, HUP, etc. in Erlang.
java - ganymed SSH2 を使用して SIGINT CTRL-C を送信しますか?
ganymed SSH2 を使用して開始したプロセスを強制終了する必要があります。Ctrl具体的には、 +を使用して優雅に殺したいと思いCます。ASCII を送信しようとするアイデアを見てきまし\x03
たが、execCommand() を使用する場合、エスケープされた文字は使用されません。ganymed を介してCtrl+ SIGINTを送信するにはどうすればよいですか?C
使用する必要がある別の Java SSH アプリがある場合はお知らせください。Jsch、sshj を調べましたが、ganymed ssh2 が最も簡単であることがわかりました。
私が殺そうとしているプログラムはテセリアルです (wireshark)
linux - How do I stop Ctrl-C from killing spawned processes with jruby?
I have a ruby program, spawning new processes. I want these to survive their parent even when I press Ctrl-C. To accomplish this, I try to trap INT, However, this doesn't help.
The program below starts an xeyes each time you press enter, quits if you write anything, and is supposed to quit if you press Ctrl-C and then return.
- If I quit the normal way, the xeyes survives.
- If I press Ctrl-C, the xeyes dies.
- Tracing the xeyes, it do receive a SIGINT, not a SIGHUP as suggested.
What can I do to keep my xeyes alive?
The program:
I have been testing with ruby as well, but since I need JMX support thats only available with jruby, I cannot use ruby as-is. The following way works in ruby:
The 'Process setsid' seems to make sure there is no controlling terminal, and I suspect this is central. However, I fail in getting jruby to accept fork, even using the -J-Djruby.fork.enabled=true flag.
bash - バックグラウンドシェルでSIGINTシグナルをトラップできません
子/バックグラウンドプロセスで実行しているときにシグナルをトラップできません。
これが私の簡単なbashスクリプトです:
これを実行し、後で実行する場合
すべてが期待どおりに機能し、印刷trapped
して終了します。
ここで、次のような親スクリプトから同じスクリプトを開始すると、次のようになります。
その後、子供はもう信号をトラップしません....?
SIGINTの代わりにSIGTERMを使用するように変更した後、正しく機能しているようです...?
c++ - デバッグ時のシグナル
ハードウェアとのインターフェースが必要な C++ の Linux でアプリケーション (実際にはサービス/デーモン) を開発しています。私のプログラムが終了時にこのハードウェアのリソースをきれいに解放しない場合、デバイス ドライバーをリロードする必要があります。このプロセスには約 10 分かかり、明らかな理由で、プログラムの各テストの間に 10 分間待たなければなりません。イライラする。
そのため、関数を使用しsigaction()
て SIGINT (ctrl-c) をキャッチし、終了時にプログラムを完全にシャットダウンできるようにしました。コンソールからプログラムを実行すると、これは正常に機能します。ただし、Netbeans または Eclipse (私は両方を試しました) でデバッグすると、うまくいきません。
- Eclipse では、提供されるコンソールで ctrl-c を押しても、SIGINT が発生したことが登録されていないようです。
- Eclipse で、プログラムをデバッグ モードで実行してから を使用する
kill -SIGINT <pid>
と、プログラムはブレークポイントにヒットしたかのように中断します。 - コンソールで ctrl-c を押すと、Netbeans は実際にシグナルが送信されたことを認識しているようで、アプリケーションに転送するかどうかを尋ねるダイアログが表示されます。「転送して続行」をクリックすると、プログラムが壊れているように見え、信号がアプリケーションによって受信されません。また、存在しないメニュー項目である [デバッグ] -> [Dbx 構成] で、この内容を構成できるとも書かれています。
- Netbeans で、デバッグ モードでプログラムを実行してから を使用する
kill -SIGINT <pid>
と、動作は上記と同じです。 - 次に、SIGQUIT ハンドラーを追加し
kill
、Netbeans でのデバッグ時にそれを送信しようとしました。今回は、ダイアログは表示されず、シグナル ハンドラはトリップしません。
デバッグ中にアプリを完全にシャットダウンする方法が必要です。何か案は?
c - マルチスレッドプログラムで SIGINT をキャッチする
Ctrl-Cユーザーから実行を終了させる可能性のあるコマンドを処理したいマルチスレッドプログラムを書いています。私の知る限り、すべての作業スレッドをキャンセルできるメインスレッドがシグナルをキャッチするという保証はありません。したがって、作業スレッドのコードに別のシグナルハンドラーを用意して、シグナルが到着した場合に誰かがそれをキャッチできるようにする必要がありますか、またはメインスレッドのコードにのみシグナルハンドラーを配置する別の方法がありますか?
ruby - ThinはSIGINTまたはSIGTERMに応答しません
bundle exec thin start -p 3111
次の出力が得られます。
ラックアダプタの使用シンWebサーバー(v1.2.11コード名Bat-Shit Crazy)最大接続数を1024に設定0.0.0.0:3111でリッスン、CTRL+Cで^Cを停止
Ctrl-Cは何もしません(SIGINT)。どちらもkillしません(SIGTERM)。
この動作への参照をいくつか見つけましたが、解決策はありません。問題は、eventmachine(最新のthinにバンドルされている)、ruby 1.9.2-r290、またはlinuxカーネル(Ubuntu 10.4 LTS、2.6.38.3-linode32)のいずれかにあるようです。
それは私のプロジェクトでは起こりますが、まったく新しいRailsプロジェクトでは起こりません。
参照: