3つのプロセスを実行して、サービスが開始され、プロンプトが表示されないことをすべて停止します。私はこの手順を自動化したい。私は最後に "&"を使ってみましたが、端末にポップします。私は "sh + x script1.sh & sh + x script2.sh"を使ってみましたI need to stop the process by pressing ctrl+c for another script to run助けてください最後にプロンプトを出さない複数のシェルスクリプトを実行するには
1
A
答えて
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)有用である。 –
関連する問題
- 1. Cのexeclp()は実行後にプロンプトを返さない
- 2. ユーザにプロンプトを出すノードの実行コマンド
- 3. 最後にプロンプトが失敗するスクリプトを期待する
- 4. OpenFileDialogにプロンプトを追加
- 5. 引数なしでrubyを実行しているときにプロンプトが表示されない
- 6. Windowsを実行中にプロンプトからPythonスクリプト
- 7. ユーザにプロンプトを表示するバッチコピースクリプト
- 8. jlineは最下部にプロンプトを表示します
- 9. (Windows)batファイルでコマンドを実行した後にプロンプトが表示されるパスワードの入力方法は?
- 10. nohup.out(bash)にアクセスした後にプロンプトを返します
- 11. getFilingsをRにするたびにプロンプト「はい」
- 12. Tcl/Tk - evalを使ってコマンドを実行した後にプロンプトを表示する方法は?
- 13. Diagnostics.Processにプロンプト入力を送信
- 14. Python cmdモジュール - 非同期イベント後にプロンプトを再開
- 15. PyQtアプリケーションの終了時にプロンプト
- 16. requestAccessForEntityTypeがユーザーにプロンプトを表示しない
- 17. git-bashでacプログラムを実行すると、print文の前にプロンプトが出る
- 18. SearchTaskにプロンプトが表示されるのはなぜですか?
- 19. バッチファイルを強制的にプロンプトに応答する
- 20. コマンドを複数回実行するシェルスクリプト
- 21. Powershellセッション中にプロンプト機能を再定義する方法
- 22. Microsoft Bot Framework、ルイスインテントからオブジェクトをダイアログにプロンプトする方法
- 23. プロキシを切り替える前にプロンプトを表示
- 24. Python:特定のキーを検出してユーザにプロンプトを表示
- 25. 私はユーザーにプロンプトを要求しません
- 26. 同じルート内をナビゲートするときにプロンプトが表示されます
- 27. は、並行して複数のシェルスクリプトを実行すると、バックグラウンド
- 28. は、シェルスクリプトを実行した後、変数は、私は、単純なシェルスクリプトを行っている
- 29. 複数のリモートマシン上でシェルスクリプトを実行
- 30. Xamarinフォームでブルートゥースを有効にするようにプロンプトを表示する
あなたが質問されます非常に軽い。フォアグラウンドで実行されていない限り、Ctrl Cを使用してプログラムを中止することはできません。 – sjsam
これをチェックする[質問](http://stackoverflow.com/questions/356100/how-to-wait-in-bash-for-several-subprocesses-to-finish-and-return-exit-code-0)、あなたを助けることができるでしょう –
@sjsam:あなたはそれを直接行うことはできませんが、フォアグラウンドプロセスでシグナルハンドラを設定することができます。これはコントロールcを捕捉し、対応するシグナルをバックグラウンドプロセスに送ります。 – user1934428