問題タブ [control-c]

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

ruby - active_record が Ruby のトラップの動作を壊すのはなぜですか? また、どうすれば回避できますか?

ここ数日、私を悩ませてきた active_record の問題の解決策を見つけようとしてきました。railsforumstackoverflowへの投稿は、完全にドライになっています。これらの投稿の長さと詳細レベルは、コメンターを思いとどまらせた可能性があるため、もう一度試してみます-簡単に.

Windows では、私のスクリプトではトラップの動作は正常です。「'active_record' が必要」になるまでは、トラップは正常に機能しません。それらはまったく実行に失敗し、データベースが混乱したままになります。

問題のスクリプトは、アクティブ レコードを介して他のシステム上の他のスクリプトと対話します。ユーザーが control-c を押すか、スクリプトが何らかの理由で終了した場合、スクリプトが終了する前に、(スクリプトの) 差し迫った破滅をデータベースに通知することが重要です。トラップが故障していて、行き詰まっています。

回避策はありますか? テスト コードに興味がある場合は、リンクされた投稿を参照してください。この問題は、わずか数行で再現できます。

ありがとう...

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

python - WindowsXP Python コンソール プログラムで Control-C を無効にする方法は?

cmd.com ウィンドウを、Control-C が Python への SIGINT シグナルを生成しないモード (重要な場合は ActiveState) に設定したいと考えています。

signal モジュールを使用して SIGINT を処理できることはわかっています。問題は、SIGINT の処理が遅すぎることです。処理されるまでに、すでにシステム コールが中断されています。

*nix の「raw」モードに相当するものが欲しいです。入力をキューに入れるだけで、アプリケーションが安全に読み取れるようになったら、読み取ります。

おかしなことに、msvcrt.getch() は Control-C を文字として返すようです。しかし、それはプログラムが getch() 自体によってブロックされている間のみ機能します。別のシステム コール (スリープ、例を使用するため) にいる場合、SIGINT を取得します。

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

java - Java で Ctrl+C をキャッチする

JavaコマンドラインアプリケーションでCtrl+シグナルをキャッチすることは可能ですか? Cプログラムを終了する前に、いくつかのリソースをクリーンアップしたいと思います。

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

objective-c - object-C の NSPIPE に control+c (SIGINT) を送信する

NSTask を介して生成された openvpn タスクを終了しようとしています。

私の質問:

NSTask の入力 NSPipe にctrl+ (SIGINT)を送信する必要がありますか?c

または、 kill( pid, SIGINT ); の使用を考えていました。ただし、プロセス ID を迂回して決定する必要があるため ([task processIdentifier] はここでは役に立ちません)、はるかに複雑になります。元の NSTask 呼び出しは次のとおりです。

それは良くありません、私は知っていますが、それは一度だけ呼び出され、その場合は sudo パスワードがすでに入力されています。

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

android - Control-CをRuntime.getRuntime()。exec( "su");を介して実行されているプロセスに送信します。

rootユーザーとしてコマンドを実行する必要があるアプリを開発しているので、次を使用します。

次に、次のコマンドでプロセスを起動します。

プロセスを終了する必要がある場合、プロセスがos.writeBytes("exit\n");機能せずprocess.waitFor();、ブロックされ、プロセスが終了しません。Control-Cをプロセスに送信して停止する必要がありますが、どうすればよいかわかりません。

ありがとう。

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

java - Java Swing: JFrame でドラッグ アンド ドロップすると「Ctrl+C」アクセラレータがトリガーされるのはなぜですか?

JFrame を作成し、そこに JMenuBar を配置すると、「Ctrl+C」アクセラレータを使用した「コピー」メニュー項目が追加されます。完全なソース コードを以下に貼り付けます。JFrame 内でドラッグ アンド ドロップすると、「Ctrl+C」アクセラレータがトリガーされていることがわかります (ActionEvent がコンソールに出力されるため)。これは、キーボードで Ctrl+C を押すのと同じです。

これは非常に奇妙な動作だと思います。なぜマウス操作がそのホットキーをトリガーするのか理解できませんでした。バグですか?

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

linux - Linux Bash スクリプト: Control-C の後に実行されるコマンド

私の目標は、新しいターミナル ウィンドウを開き、そのウィンドウでリモート マシンに SSH 接続し、ユーザーに続行するように促してから、コマンドを実行することです。私は現在持っています:

これは機能し、私の主な目標を達成します。

問題は、ユーザーが「Press ENTER...」プロンプトで待っている間に Control-C でスクリプトを終了しようとすると、コマンドの残りが実行されることです (たとえば、hello.txt がリモート マシンに表示されます)。

なぜこれが起こっているのか、それを回避する方法について何か考えはありますか?

ありがとう!

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

java - VM が Control-C によってシャットダウンされた場合、タイマーで開始されたスレッドが最後まで実行されるようにすることはできますか?

次の関数をいくつか呼び出すとします。

私の理解では、この時点で多数のスレッドが同時に実行されます。つまり、各タイマー インスタンスは、1 分間隔で存続期間の短いスレッドを生成します。

次の手順に従って、シャットダウン フック (Control-C を押したときに実行される) をインストールするとします。

Java で Ctrl+C をキャッチする

シャットダウン フックは、すべてのタイマーをキャンセルします。(タイマーをクラスレベルのコレクションに保存すると仮定します)

VM が終了する前に、すべてのアクティブなスレッドが完了するまで実行されることを保証できますか?

これに関連して、シャットダウンフックはスレッドがすべて終了したときにのみ呼び出されますか?

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

python - ^C/KeyboardInterrupt を使用して子スレッドで Python raw_input() を中断する

マルチスレッドの Python プログラムでは、1 つのスレッドが組み込みのraw_input()を使用してコンソール入力を要求することがあります。raw_input プロンプトが表示されているときに、シェルで ^C と入力して (つまり、SIGINT シグナルを使用して) プログラムを終了できるようにしたいと考えています。ただし、子スレッドが raw_input を実行している場合、^C と入力しても何も起こりません。Return を押す (raw_input を離れる) まで、KeyboardInterrupt は発生しません。

たとえば、次のプログラムでは:

^C と入力しても、入力が終了するまで何も起こりません。ただし、呼び出すだけの場合T().run()(つまり、シングルスレッドの場合: メインスレッドで raw_input を実行するだけ)、^C はすぐにプログラムを閉じます。

おそらく、これは SIGINT がメイン スレッドに送信され、コンソール上でフォークされたスレッド ブロックが読み取られている間、メイン スレッドが中断されている (GIL を待機している) ためです。メイン スレッドは、raw_input が返された後に GIL を取得するまで、シグナル ハンドラを実行できません。(これについて間違っている場合は訂正してください。私は Python のスレッド実装の専門家ではありません。)

SIGINT をメインスレッドで処理できるようにしながら、raw_input のような方法で stdin から読み取り、プロセス全体をダウンさせる方法はありますか?

[Mac OS X といくつかの異なる Linux で上記の動作を確認しました。]


編集:上記の根本的な問題を誤解しています。さらに調査すると、join()シグナル処理を妨げているのはメイン スレッドの呼び出しです。これは、スレッド全体が終了するまでシグナルが実際に延期されていることを意味します。したがって、これは実際にはまったく関係ありませんraw_input(結合が完了しないようにバックグラウンド スレッドがブロックされているという事実だけです)。

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

python - Python プログラムの停止

電気自動車のバッテリー電圧と温度を表示する Python プログラムがあります。私は通常、Mac のコマンド ラインから実行します。上向き矢印を使用してディレクトリを変更するコマンドを見つけ、次に上向き矢印を使用してプログラムを実行するコマンドを見つけます。これを自動的に実行するスクリプトを作成し、アプリケーションとして保存する方法を見つけました。うまく機能しますが、プログラムを終了する方法がわかりません。コマンドラインを使用するときは、コントロール C を使用します。スクリプトまたはアプリで実行するにはどうすればよいですか? 私は、お客様にコマンド ラインを使用するように依頼したくありません。