Попробуйте:
#!/bin/bash
_term() {
echo "Caught SIGTERM signal!"
kill -TERM "$child" 2>/dev/null
}
trap _term SIGTERM
echo "Doing some initial work...";
/bin/start/main/server --nodaemon &
child=$!
wait "$child"
Обычно, bash
игнорирует любые сигналы во время выполнения дочернего процесса. Запустив сервер с помощью &
, он запишется в систему управления заданиями оболочки, при этом $!
будет держать PID сервера (для использования с wait
и kill
). Вызов wait
будет ждать завершения задания с указанным PID (сервера), или увольнения любых сигналов .
Когда оболочка получает SIGTERM
(или сервер выходит независимо), возвратится вызов wait
(выход с кодом выхода сервера, или с номером сигнала + 128 в случае получения сигнала). После этого, если оболочка получила ЗАПИСЬ, она вызовет функцию _term
, указанную в качестве обработчика ловушки ЗАПИСЬ перед выходом (в которой производится очистка и ручное распространение сигнала на процесс сервера с помощью kill
).
Пример
Installation