2

基本的に、bash スクリプトがノード スクリプトを永久に実行するようにしようとしています。次のbashスクリプトを作成しました。

#!/ビン/バッシュ
真の間; 行う
        cd /マイスコープ/
        nohup.out のリンクを解除
        ノード myscript.js
        睡眠 6
完了 & エコー $! >ピッド

実行すると、指定されたスクリプトでノードを起動し、ノードが終了するかどうかを確認し、終了した場合は 6 秒間スリープし、ノードを再度開くことを期待しています。また、バックグラウンドで実行され、「pid」というファイルに pid (bash pid) が書き込まれることを期待しています。

上記で説明したものはすべて期待どおりに動作するようですが、bash スクリプトの pid が強制終了されるとノード スクリプトの実行が停止することも期待しています。練習してもうまくいきません。確かに、bash スクリプトは強制終了されますが、ノード スクリプトは実行され続け、それが私を驚かせています。

bashスクリプトをバックグラウンドに送信せずにctrl + cを入力することで、ターミナルでテストしました。両方のスクリプトが強制終了されます。

バックグラウンドプロセスの仕組みについて何かを理解していないのは明らかです。神のために、誰か私を助けることができますか?

4

1 に答える 1

3

試していることを実行できるツールはたくさんありますが、私の頭の上にあるのは次の 2 つだけです。

探しているものではないかもしれませんが、一見の価値があります。

それらを使用できない、または使用したくない場合、問題は、親プロセスを強制終了しても子プロセスがまだ存在することです。したがって、それも強制終了する必要があります。

pkill -TERM -P $PID

$PID親 PID です。

于 2013-05-24T13:45:46.170 に答える