bash перезапустить подпроцесс с использованием ловушки SIGCHLD?

Я видел программы мониторинга либо в сценариях, которые периодически проверяют статус процесса с помощью 'ps' или 'service status (в Linux)', либо в C / C ++, который разветвляется и ждет процесса ...

Интересно, можно ли использовать 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 просто спит на несколько секунд и пока завершается.

Наблюдалось несколько проблем:

  • когда оболочка запускается в передний план, SIGCHLD будет обрабатывать только один раз. обрабатывает ли сигнал сброса прерывания как signal ()?
  • скрипт и его потомок кажутся невосприимчивыми к SIGINT, что означает, что они не могут быть остановлены с помощью ^ C
  • , поскольку не могут быть закрыты, я закрыл терминал. Похоже, что сценарий HUP, и многие дети-зомби остались.
  • при запуске в фоновом режиме сценарий вызывал смерть терминала

... в любом случае, это не работает вообще. Я должен сказать, что слишком мало знаю об этой теме. Может кто-нибудь предложить или привести несколько рабочих примеров? Существуют ли сценарии для такого использования?

как насчет использования wait в bash?

Спасибо

7
задан Jolta 11 April 2017 в 08:21
поделиться