問題タブ [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.
makefile - GNU make でエラーと割り込みをトラップするにはどうすればよいですか?
に組み込まれているのと同様にtrap
、 GNUで実装する方法があるかどうか疑問に思っていますか?make
BASH
ユーザーが を押した場合CTRL-C
、またはそれmake
自体が失敗した場合 (ゼロ以外の終了)、特定のターゲットまたはマクロを呼び出したいと思います。
bash - TERMのbashトラップ-私は何を間違っているのですか?
このhack.cプログラムを考えると:
そしてこのhack.shbashスクリプト:
hack.shを実行すると、2つのプロセスが作成されます。1つはbash用、もう1つはCタスク用です。TERMシグナルがbashプロセスに送信されても、Cプロセスは無傷です。
ここで、元のbashがRuntime.exec()を使用してJavaプログラムから起動されたとすると、それを制御できるのはProcess.destroy()(TERMをbashプロセスに送信する)だけですか?Cプロセスを起動したbashと一緒に終了させたいとしましょう。
私はbashでこのようなことを試みてきました:
つまり、TERMシグナルをキャッチし、それをプロセスグループ全体に再ブロードキャストするトラップ句。これは私には機能しません-そのトラップ句を含むbashプロセスはTERMシグナルを無視します。
ここで何が欠けていますか?
bash - bashで*どの*トラップ信号を検出することは可能ですか?
重複の可能性:
bashシェルスクリプトで受信した信号名を特定する
次のようなものを使用する場合trap func_trap INT TERM EXIT
:
関数ブロックに、どのトラップがそれを呼び出したかを検出する方法はありますか?
何かのようなもの:
または、トラップタイプごとに、何か異なることを行う個別の関数を作成する必要がありますか?最新の受信信号を保持するbash変数はありますか?
前もって感謝します!
bash - スクリプトからスクリプトにシグナル SIGINT を送信する方法は?
Script-A.sh から Script-B.sh へのシグナル送信をトラップしたいので、Script-A.sh で次のコマンドを使用します。
(SIGINT を Script-B.sh に送信)
kill -2 $PID_Script-B.sh
そして Script-B.sh では、シグナルをキャッチして関数 Clean を呼び出します
トラップ「クリーン」2
これは機能しません。代わりに、Script-B.sh は Clean !! を実行せずにすぐに強制終了されます。
また、ターミナルからそれをトラップするスクリプトに SIGINT を送信したい場合、 actrl-c
は正しくキャッチされますが、コマンドを介してシグナルを指定した場合はそうではありません。kill -2 $pid_of_script
SIGINT ( ctrl-c
VS kill -2 $pid_of_script
) を送信する 2 つの方法の違いと、スクリプトから別のスクリプトに SIGINT を送信する方法について何か考えはありますか?
bash - スクリプトのコレクションを介して信号を伝播する方法は?
メインスクリプトによって制御されるスクリプトのコレクションがあります。メイン スクリプトでシグナルctrl+をトラップし、それを他のスクリプトに伝達したいと考えています。c他のスクリプトもこのシグナルを (メイン スクリプトから) トラップし、いくつかのクリーンアップを行う必要があります ...
私はkill -s SIGINT
子に送信しようとしましたが、信号をキャッチできないようです (trap 'Cleanup' SIGINT
子スクリプトで定義されていても)。
これを実現する方法の手がかりはありますか?
bash - 同じシグナルに対する複数の Bash トラップ
trap
Bash でコマンドを使用するtrap
と、指定されたシグナルの前のものが置き換えられます。
同じ信号に対して複数のtrap
発砲を行う方法はありますか?
bash - トラップコードでbashトラップを再度設定するには?
初めて呼び出された後に EXIT トラップによって呼び出される必要がある bash 関数があります。関数は、関数が終了するとすぐにトラップを起動するように再度設定します。
私が抱えている問題は、トラップが 1 回しか実行されない、つまりdoStuff
2 回しか実行されないことです。
単純な for ループを使用しない理由は、CPU のサブセットごとに関数doStuff
k
を実際に 1 回呼び出し、処理が非常に多いため、一度に 1 つのインスタンスのみを CPU で実行したいからです。集中的な。それが私がミューテックスロックを持っている理由でもあります。次に、のインスタンスが返されるとすぐに、次のインスタンスを起動したいと思います(実際、それらはすべて異なるシミュレーションです)。launchNextExperiment
doStuff
doStuff
k
doStuff
ネストされたサブシェルごとにトラップが設定され、最終的launchNextExperiment
に実行回数がCPU ごとk
に 1 つだけであることを確認するにはどうすればよいですか?doStuff
linux - Linuxプログラムのシグナルを外部から無効にする
Linuxでは、プログラムのシグナリングを外部から無効にすることは可能ですか?つまり、ソースコードを変更する必要はありませんか?
コンテクスト:
Linuxのbashスクリプト内からC(およびJava )プログラムを呼び出しています。bashスクリプト、およびスクリプトが(フォアグラウンドプロセスとして)起動する他のプログラムを中断したくありません。
私は使用できますが...
... Ctrl C信号を無効にするbashスクリプトでは、これはプログラムコントロールがbashコードに含まれている場合にのみ機能します。つまり、Cプログラムの実行中にCtrl Cを押すと、Cプログラムが中断され、終了します。このCプログラムはいくつかの重要な操作を行っているため、中断されたくありません。このCプログラムのソースコードにアクセスできないので、Cプログラム内の信号処理は問題外です。
よろしく、
/ HS
bash - 別のファイルを`source`すると、以前に定義された`trap INT`が機能しませんか?
これを Bash スクリプトの上に配置すると、Control+C が機能しません。
しかし、数行後に配置すると、Control + C がトラップされます。
更新:
の後に配置source "$HOME/.rvm/scripts/rvm"
すると、機能します。
trap INT
では、以前に定義された別のファイルをソースする場合、動作しませんか?
bash - PIDが既知の別のプロセスに対してbashでトラップを設定します
バックグラウンドで開始している bash プロセスのトラップを設定する必要があります。バックグラウンド プロセスは非常に長く実行される可能性があり、その PID が特定のファイルに保存されます。
ここで、そのプロセスにトラップを設定する必要があるため、プロセスが終了すると PID ファイルが削除されます。
それを行う方法はありますか?
編集#1
問題の説明が十分に正確ではなかったようです。私はすべてのコードを完全に制御できますが、実行時間の長いバックグラウンド プロセスは次のとおりです。
このステートメントが入っているスクリプトの先頭にトラップを追加すると、$$
ここで開始しているこの小さなバックグラウンド プロセスの PID ではなく、より大きなスクリプトの PID になります。
では、そのバックグラウンド プロセスに具体的にトラップを設定するにはどうすればよいでしょうか。