2016-12-12 4 views
1

3つのプロセスを実行して、サービスが開始され、プロンプトが表示されないことをすべて停止します。私はこの手順を自動化したい。私は最後に "&"を使ってみましたが、端末にポップします。私は "sh + x script1.sh & sh + x script2.sh"を使ってみましたI need to stop the process by pressing ctrl+c for another script to run助けてください最後にプロンプ​​トを出さない複数のシェルスクリプトを実行するには

+0

あなたが質問されます非常に軽い。フォアグラウンドで実行されていない限り、Ctrl Cを使用してプログラムを中止することはできません。 – sjsam

+0

これをチェックする[質問](http://stackoverflow.com/questions/356100/how-to-wait-in-bash-for-several-subprocesses-to-finish-and-return-exit-code-0)、あなたを助けることができるでしょう –

+0

@sjsam:あなたはそれを直接行うことはできませんが、フォアグラウンドプロセスでシグナルハンドラを設定することができます。これはコントロールcを捕捉し、対応するシグナルをバックグラウンドプロセスに送ります。 – user1934428

答えて

0

3つのプロセスをバックグラウンドで起動し、ユーザーがCtrl + C.次に、一般的なスクリプトにトラップを追加して、シャットダウンフックを起動します。

私は解決策は、このように見えることを考える:私はちょうどテストにいくつかのエコーメッセージを追加した

  • :という

    #!/bin/bash 
    
    end_processes() { 
        echo "Shutdown hook" 
        if [ -n $PID1 ]; then 
        echo "Killing PID 1 = $PID1" 
        kill -9 $PID1 
        fi 
        if [ -n $PID2 ]; then 
        echo "Killing PID 2 = $PID2" 
        kill -9 $PID2 
        fi 
        if [ -n $PID2 ]; then                                         
        echo "Killing PID 3 = $PID3" 
        kill -9 $PID3 
        fi 
    } 
    
    # Main code: Add trap 
    trap end_processes EXIT 
    
    # Main code: Launch scripts 
    ./script1.sh & 
    PID1=$! 
    
    ./script2.sh & 
    PID2=$! 
    
    ./script3.sh & 
    PID3=$! 
    
    # Main code: wait for user to press Control+C 
    while [ 1 ]; do 
        sleep 1s 
    done 
    

    は注意してください。

  • Trapは、スクリプトでEXITを受信したときに関数を実行します。特定の信号(SIGINT)のみをキャプチャすることで受信信号を変更することができます
  • トラップ機能は-9でプロセスを強制終了します。私はあなたが望むならば、他の殺す信号を送ることができます
  • $!最新のbackgroudコマンドのPIDを取得します。
  • あなたが完了すると、より多くの短い時間を待つプロセスのaproximate時間のために、最初にスリープ状態に(コマンドながら、最後の)待機ループを変更することができます。

    APROX_TIME=30s 
    POLL_TIME=2s 
    sleep $APROX_TIME 
    while [ 1 ]; do 
        sleep $POLL_TIME 
    done 
    
+0

@Shreyas [この回答を受け入れる](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)有用である。 –

関連する問題