Назад | Перейти на главную страницу

Убить дочерний процесс при выходе из родительского

Я готовлю сценарий для Docker, который разрешает только один процесс верхнего уровня, который должен получать сигналы, чтобы мы могли его остановить.

Поэтому у меня есть такой сценарий: одно приложение записывает в системный журнал (сценарий bash в этом примере), а другое просто печатает его.

#! /usr/bin/env bash
set -eu

tail -f /var/log/syslog &

exec bash -c 'while true ; do logger aaaaaaaaaaaaaaaaaaa ; sleep 1 ; done'

Почти решено: когда процесс верхнего уровня bash получает SIGTERM - он существует, но tail -f продолжает бежать.

Как мне проинструктировать tail -f выйти при выходе из родительского процесса? Например. он также должен получить сигнал.

Примечание: нельзя использовать ловушки bash, так как exec в последней строке полностью заменяет процесс.

Если вам повезет ^ Wusing tail command из GNU coreutils, вы можете использовать --pid=<number> вариант. Столица -F вариант защитит вас от ротации журнала.

tail --pid="$$" -F /var/log/syslog &

Больше информации: http://www.gnu.org/software/coreutils/manual/html_node/tail-invocation.html