問題タブ [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.

0 投票する
6 に答える
9686 参照

makefile - GNU make でエラーと割り込みをトラップするにはどうすればよいですか?

に組み込まれているのと同様にtrap、 GNUで実装する方法があるかどうか疑問に思っていますか?makeBASH

ユーザーが を押した場合CTRL-C、またはそれmake自体が失敗した場合 (ゼロ以外の終了)、特定のターゲットまたはマクロを呼び出したいと思います。

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

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シグナルを無視します。

ここで何が欠けていますか?

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

bash - bashで*どの*トラップ信号を検出することは可能ですか?

重複の可能性:
bashシェルスクリプトで受信した信号名を特定する

次のようなものを使用する場合trap func_trap INT TERM EXIT

関数ブロックに、どのトラップがそれを呼び出したかを検出する方法はありますか?

何かのようなもの:

または、トラップタイプごとに、何か異なることを行う個別の関数を作成する必要がありますか?最新の受信信号を保持するbash変数はありますか?

前もって感謝します!

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

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-cVS kill -2 $pid_of_script) を送信する 2 つの方法の違いと、スクリプトから別のスクリプトに SIGINT を送信する方法について何か考えはありますか?

0 投票する
4 に答える
9561 参照

bash - スクリプトのコレクションを介して信号を伝播する方法は?

メインスクリプトによって制御されるスクリプトのコレクションがあります。メイン スクリプトでシグナルctrl+をトラップし、それを他のスクリプトに伝達したいと考えています。c他のスクリプトもこのシグナルを (メイン スクリプトから) トラップし、いくつかのクリーンアップを行う必要があります ...

私はkill -s SIGINT子に送信しようとしましたが、信号をキャッチできないようです (trap 'Cleanup' SIGINT子スクリプトで定義されていても)。

これを実現する方法の手がかりはありますか?

0 投票する
19 に答える
38926 参照

bash - 同じシグナルに対する複数の Bash トラップ

trapBash でコマンドを使用するtrapと、指定されたシグナルの前のものが置き換えられます。

同じ信号に対して複数のtrap発砲を行う方法はありますか?

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

bash - トラップコードでbashトラップを再度設定するには?

初めて呼び出された後に EXIT トラップによって呼び出される必要がある bash 関数があります。関数は、関数が終了するとすぐにトラップを起動するように再度設定します。

私が抱えている問題は、トラップが 1 回しか実行されない、つまりdoStuff2 回しか実行されないことです。

単純な for ループを使用しない理由は、CPU のサブセットごとに関数doStuff kを実際に 1 回呼び出し、処理が非常に多いため、一度に 1 つのインスタンスのみを CPU で実行したいからです。集中的な。それが私がミューテックスロックを持っている理由でもあります。次に、のインスタンスが返されるとすぐに、次のインスタンスを起動したいと思います(実際、それらはすべて異なるシミュレーションです)。launchNextExperimentdoStuffdoStuffkdoStuff

ネストされたサブシェルごとにトラップが設定され、最終的launchNextExperimentに実行回数がCPU ごとkに 1 つだけであることを確認するにはどうすればよいですか?doStuff

0 投票する
5 に答える
9908 参照

linux - Linuxプログラムのシグナルを外部から無効にする

Linuxでは、プログラムのシグナリングを外部から無効にすることは可能ですか?つまり、ソースコードを変更する必要はありませんか?

コンテクスト:

Linuxのbashスクリプト内からC(およびJava )プログラムを呼び出しています。bashスクリプト、およびスクリプトが(フォアグラウンドプロセスとして)起動する他のプログラムを中断したくありません。

私は使用できますが...

... Ctrl C信号を無効にするbashスクリプトでは、これはプログラムコントロールがbashコードに含まれている場合にのみ機能します。つまり、Cプログラムの実行中にCtrl Cを押すと、Cプログラムが中断され、終了します。このCプログラムはいくつかの重要な操作を行っているため、中断されたくありません。このCプログラムのソースコードにアクセスできないので、Cプログラム内の信号処理は問題外です。

よろしく、

/ HS

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

bash - 別のファイルを`source`すると、以前に定義された`trap INT`が機能しませんか?

これを Bash スクリプトの上に配置すると、Control+C が機能しません。

しかし、数行後に配置すると、Control + C がトラップされます。

更新

の後に配置source "$HOME/.rvm/scripts/rvm"すると、機能します。

trap INTでは、以前に定義された別のファイルをソースする場合、動作しませんか?

0 投票する
4 に答える
3369 参照

bash - PIDが既知の別のプロセスに対してbashでトラップを設定します

バックグラウンドで開始している bash プロセスのトラップを設定する必要があります。バックグラウンド プロセスは非常に長く実行される可能性があり、その PID が特定のファイルに保存されます。

ここで、そのプロセスにトラップを設定する必要があるため、プロセスが終了すると PID ファイルが削除されます。

それを行う方法はありますか?

編集#1

問題の説明が十分に正確ではなかったようです。私はすべてのコードを完全に制御できますが、実行時間の長いバックグラウンド プロセスは次のとおりです。

このステートメントが入っているスクリプトの先頭にトラップを追加すると、$$ここで開始しているこの小さなバックグラウンド プロセスの PID ではなく、より大きなスクリプトの PID になります。

では、そのバックグラウンド プロセスに具体的にトラップを設定するにはどうすればよいでしょうか。