問題タブ [bash-trap]
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.
bash - Bash-- CTRL+C をトラップして端末のプロパティをリセットし、無限の while ループを終了します
したがって、前景/背景色などの端末プロパティを変更するこの無限ループがあります。
仕様:CTRL+C
が押されると、ループ/スクリプトを終了する前に、端末を元のプロパティにリセットする必要があります。
CTRL+C
今、トラップしてターミナルをリセットする必要があると思いますsetterm reset
が、スクリプトに統合できないようです。
while ループの外側でをトラップするCTRL+C
と、端末はリセットされません。無限ループ内でも機能しません。
終了時に端末のプロパティは変更されたままです。
例:
CTRL+C
をトラップし、端末をリセットして終了するにはどうすればよいですか?
bash - 関数を呼び出すための再帰的な bash トラップ
CTRL+Cをトラップして関数 ctrl_c を呼び出すbash トラップを作成しました。この関数は、メッセージを表示してカウンターを開始し、メイン関数に戻ります。
トラップは最初の実行時には正常に機能しますが、2 回目に試行すると C^ が表示されますが、CTRL + C は無効になりますが、関数は再度呼び出されません。
最初のインスタンスのように実行するようにトラップをリセットする方法はありますか?
前もって感謝します。
コード;
ruby - ruby スクリプトの後のクリーンアップ -- シグナルのトラップ
私の Ruby スクリプトは一時ファイルを作成し、潜在的に長時間実行される外部プロセスを生成します。スクリプトの終了方法に関係なく、スクリプトの終了後にどちらも存在し続けることはできません。
次の行で問題が解決すると思いました。
これらは、次の bash コードを書き直したものであると思われますが、これは正常に動作するようです。
しかし、そうではありません。後で例外が発生した場合、生成されたプロセスは終了しません。
誰かが私が間違っていることを教えてもらえますか?
編集:トラップは機能します。上記のコードには複数の欠陥があります。
- Tempfile は自動的に処理されます。トラップ ハンドラで既に削除されている可能性があり、FileUtils.rm_f で別のエラーが発生して防止される可能性があります。
- Process.kill にはシグナルが必要です -- Process.kill "TERM"、pid (または "KILL")。発生したエラーは、Process.kill の誤った呼び出しのエラーを隠していました。
固定コード:
Ensure
も動作します。
bash - pgrep -P $$ が存在しないプロセス ID を与える
出力します
トラップでのみ発生します。存在しない PID が配列に追加されるのはなぜですか? そして、この奇妙な動作を回避するにはどうすればよいですか?