我見過監視程序或者在腳本中使用'ps'或'服務狀態(在Linux上)「定期檢查進程狀態,或者在C/C++中分支並等待進程...bash使用陷阱SIGCHLD重啓子進程?
I想知道是否有可能在陷阱中使用bash,並在SIGCLD收到時重新啓動子進程?
我已經測試在RedHat Linux基本套房配有以下想法(當然它不工作...)
#!/bin/bash
set -o monitor # can someone explain this? discussion on Internet say this is needed
trap startProcess SIGCHLD
startProcess() {
/path/to/another/bash/script.sh & # the one to restart
while [ 1 ]
do
sleep 60
done
}
startProcess
什麼bash腳本正在開始只是睡了幾秒鐘,然後退出了現在。
觀察到幾個問題:
-
當shell在前臺開始
- ,SIGCHLD會一次處理。是否會陷入像signal()這樣的重置信號處理?
- 腳本和它的孩子似乎不受SIGINT的影響,這意味着他們不能通過^ C
- 停止,因爲無法關閉,所以我關閉了終端。劇本似乎是HUP,許多殭屍小孩都離開了。
- 在後臺運行時,該腳本導致終端死亡
...無論如何,這並不在所有的工作。我不得不說,我對這個話題知之甚少。 有人可以建議或舉一些工作的例子嗎? 是否有這樣的使用腳本?
如何在bash中使用等待呢?
感謝
謝謝吉米,你的分享,甚至測試了可怕的腳本。我已經停止了嘗試,使用'傳統'方式來做 - 循環和檢查一個。但是,我測試了「等待」,它在基本場景中確實運行得非常好。 !'#/斌/慶典 thepid = 0 stopnow = 0 組-o監視 陷阱清理SIGINT SIGTERM 清理(){ 陷阱 - SIGINT SIGTERM stopnow = 1 如果[$ {thepid} -ne 0] 然後 回聲殺死$ {thepid} 殺$ {thepid} 音響 } 而[$ {stopnow} -ne 1] 做 回聲開始 ./trial.sh& thepid = $! echo「等待$ {thepid}」 等待$ {thepid} 完成 退出0 ' –