問題タブ [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.
c - このコードが期待どおりに機能しないのはなぜですか?
最近、シグナルを使用したプログラミングを始めました。C のマルチスレッド サーバー コードでそれらを使用しました。シグナルに関連するコードの一部を次に示しますが、正常に機能しません。
シグナルハンドラ:
}
Main() の内部:
私はこの方法をここで読んだ。kill -s SIGINT <pid of my program>
別の端末ウィンドウから送信しようとしましたが、プログラムが終了します。
python-2.7 - Pythonスクリプトに送信されたSIGINTがMySQL接続を切断するのはなぜですか?
MySQLdb (mysql-python) を使用して MySQL データベースに接続している Python スクリプトに SIGINT を送信する際に問題が発生しています。Python スクリプトは無限ループで実行されます。スクリプトの現在のループが完了した後、SIGINT をキャッチして正常に終了したいと考えています。ただし、SIGINT は実行中の mysql クエリを中断し、サーバーから切断します。これにより、Python スクリプトが現在のループを終了しようとするため、エラーが発生します。
動作を次のスクリプトに絞り込みました。
infinity.py
このスクリプトをコマンド ラインから実行し、別のシェルから SIGINT を送信すると (を使用sudo kill -INT $PID
)、次の出力が得られます。
handling SIGINT
シグナルを送信するとすぐに が出力され、直後に が続きFinished very long query
ます。execute
したがって、通話が中断されていることは明らかです。また、上記のスクリプトを gdb でデバッグしました。SIGINT を送信すると、gdb が停止し、次の出力が表示されます。
興味深いことに、私の Python シグナル ハンドラーからの出力行は、gdb を介して実行すると実行されませんが、libpthread.so.0 では実行が中断されます。
MySqldb パッケージの基礎となる C コードは、独自のシグナル ハンドラを登録していますか? クエリは別のスレッドで実行されていますか? その場合、Python スクリプトだけでなくシグナルも受信しますか?
この動作を防ぐ方法はありますか? シグナル ハンドラーを変更して MySQL に再接続できることを発見しました (MySQLdb.connect
再度呼び出すことにより)。これにより、今後のクエリが失敗するのを防ぐことができますが、現在のクエリが中止されるという影響がまだあります。
ありがとうクリス
linux - qemu の control+c シグナル
qemuがcontrol + c信号を処理する方法を理解するのを手伝ってもらえますか? そして、どのファイルで?(またはそれを理解するためのいくつかの便利なリンク)ルート(コールグラフなど)を作成したい。実際、このシグナルは私の mips ゲストでは機能していません (ただし、同じホストのマルタ mips では機能しています) ありがとうございます。
ホスト & ゲスト OS: Linux ゲスト アーキテクチャ: Mips64 ホスト アーキテクチャ: x86 QEMU バージョン: qemu-1.0.1
linux - control+c が機能しない
MIPS アーキテクチャの Linux 2.6.32.13-Cavium-Octeon を使用しています。端末で ctrl+c を押してプロセスを終了すると; 何も起こりません。カーネルでこれをトレースして問題を処理するにはどうすればよいですか?
stty -a
出力は次のとおりです。
ttyに問題はありますか?make menuconfig
「ttyを有効にする」ためのオプションがなく、コマンドbind -v
も機能していないためです。
ありがとう
linux - 「ctrl c」を使用してすべてのプロセスを強制終了するにはどうすればよいですか?
C++ コードからコンパイルされた exe ファイルがあります。そして、bash を使用して Linux 環境をセットアップし、この.exe
プログラムを呼び出します。
ここで問題になりますが、ほとんどの場合、ユーザーはctrlcプログラムの使用を終了するとき、または続行したくないときにプロセスを強制終了するために使用したいと考えています。
bash プロセスはctrlc正常に終了しますが、.exe
通常は強制終了されずに実行されています。そのため、ユーザーkill -9 xxx
はプロセスを強制終了するために使用する必要があります。殺すのを忘れると、CPU が完全に占有される可能性があります。
この問題を解決するにはどうすればよいですか? exeファイルのコードやbashスクリプトをどうにかしようかな。
ありがとう
linux - bash でキーボード割り込みをキャプチャする
キーボード割り込みをキャプチャするbashの機能があります。関数は次のようになります。
さて、同じスクリプト内にinstall()
、標準./configure
の , make
,make install
プロセスを使用して、ソースからいくつかのパッケージを次々にインストールするという別の関数があります。アイデアは、3 つのインストールを次々に実行している間にユーザーの割り込みをキャプチャすることです。問題は、次のステートメントをどこに置くかです。
install()
では、関数内の最初のステートメントとして配置する必要がありますか? それともif-else
条件が必要ですか?
c - 子プロセスの SIGINT について
私はシェルを書いています。今度は子プロセスを制御します。signal (SIGTERM, SIG_DFL);
子プロセスで使用すると、
信号 SIGINT は Ctrl + C によって生成され、その信号は OS シェル全体を終了します。
シェル全体ではなく、「cat」のみなど、プロセスを終了するにはどうすればよいですか?? 次のようなものを使用する必要があります:
本当にスロットに感謝します。
linux - LinuxでのSIGINTシグナルの再インストール
Linux シグナルを扱うプログラムを書いています。具体的には、シグナル SIGINT を子プロセスに再インストールしたいのですが、機能しないことがわかりました。
これが私のコードのより単純なバージョンです:
シェルが「In child process:」と出力しているときに、ctrl+c を押します。関数handler
は問題handler2
なく実行されますが、実行されることはありません。
私のコードのこのバグを手伝ってくれませんか?
更新: プロセスの実行中に子プロセスに SIGINT シグナルを受信させたいのですfoo
が、それは可能ですか?
ruby - Ctrl+C で Sinatra + EM::WebSocket サーバーを強制終了しない
EM::WebSocket サーバーと Sinatra サーバーの両方を実行する Ruby アプリを構築しています。個人的には、これらの両方が SIGINT を処理する機能を備えていると思います。ただし、同じアプリで両方を実行すると、Ctrl + C を押すとアプリが続行されます。私の推測では、そのうちの 1 つが SIGINT をキャプチャしており、もう 1 つもそれをキャプチャできないようにしています。しかし、それを修正する方法がわかりません。
一言で言えばコードは次のとおりです。