Я видел программы мониторинга либо в скриптах, которые периодически проверяют состояние процесса с помощью 'ps' или 'status (в Linux)' ', либо в C / C ++, который разветвляется и ждет процесса ...
Интересно, можно ли использовать bash с trap и перезапустить подпроцесс при получении 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, просто поспите несколько секунд и выйдите из него.
обнаружено несколько проблем:
- когда оболочка запускается на переднем плане, SIGCHLD будет обрабатываться только один раз. обработка сигнала сброса ловушки похожа на signal ()?
- сценарий и его дочерний элемент кажутся невосприимчивыми к SIGINT, что означает, что они не могут быть остановлены ^ C
- так как не может быть закрыт, я закрыл терминал. Сценарий, кажется, HUP и многие дети-зомби остались.
- при запуске в фоновом режиме, скрипт вызывал смерть терминала
... во всяком случае, это не работает вообще. Я должен сказать, что слишком мало знаю об этой теме.
Может кто-нибудь предложить или привести несколько рабочих примеров?
Есть ли сценарии для такого использования?
как насчет использования wait в bash, тогда?
Спасибо