私は同時に実行する必要がある三つのプログラムの起動とシャットダウンを自動化するためにbashでラッパースクリプトを記述しようとしている:2つのプロセスを監視するには、どうすればよいですか(bashスクリプト)
#!/bin/bash
gnome-screensaver-command -i -n aeolus-wrapper.sh &
aeolus &
qjackctl
それらを開始した後、私はアイオロスとqjackctlを監視し、残りの二つを殺すために必要がありますaeolusまたはqjackctlのいずれかが終了した場合の処理:
# if aeolus exits, kill gnome-screensaver-command and qjackctl
# if qjackctl exits, kill gnome-screensaver-command and aeolus
これは私が立ち往生した場所です。私はthis exampleに興味を持って、until
ループを使用してプロセスを監視し、それが再開した場合に再起動する方法を示していますが、そこからどのように行きたいのかはわかりません。どんな提案も大歓迎です。 qjackctl
別の構文については、同じ
ありがとうございます。私はqjackctlを閉じると、aeolusとgnome-screensaver-commandをkillします。しかし、私がaeolusを閉じると、qjackctlを正常に終了させることはできません。代わりに、コマンドラインで "jack main catch signal 12"と表示され、ラッパースクリプトは引き続き待機します。 (qjackctlはjackdのGUIフロントエンドであり、aeolusを起動すると自動的にjackdが起動します) – user1148928
AeolusがSIGTERMを捕まえてSIGSYSをjackdに送信しているようです。 aeolusにどの信号を送信して正常終了させることができるかを把握する必要があります。 –
(1)qjackctlは実際にqjackctl.binであり、そのようにリストされる必要があります。 (2)jackdを明示的にリストに含める必要があります。これはうまくいきます: '#!/ bin/bash set -m トラップ 'list = $(jobs -rp); test -n "$ list" && kill $ list 'CHLD gnome-screensaver -i -n aeolus-wrapper.sh& jackd -T -ndefault -dalsa -dhw:0 -r44100 -p1024 -n2& aeolus & qjackctl.bin& wait'もちろん、ここには示されていない適切な改行があります。もう一度、助けてくれてありがとう。 – user1148928