У меня есть коллекция процессов, которые я запускаю из сценария оболочки следующим образом:
#!/bin/bash
#This is a shortcut to start multiple storage services
function finish {
alljobs=$(jobs -p)
if [ ! -z "$alljobs" ]; then
kill $alljobs >/dev/null 2>&1
else
echo "Entire trio ceased running"
fi
}
trap finish EXIT
./storage &
P1=$!
./storage &
P2=$!
./storage &
P3=$!
wait $P1 $P2 $P3
В настоящее время он выполняется так, как я хочу, в том случае, когда я посылаю сигнал ctrl+c
Сценарий отправляет этот сигнал всем моим фоновым процессам.
Однако: теперь я расширил эти программы, чтобы на основании соединений / сообщений, которые они получают от клиентов, они могли выполнять execv
,убить себя и запустить новую, отдельную программу.(Любопытно, что они имитируют «мертвое» состояние сервера, запустив процесс холостого хода, который затем может получить сигналы для повторного запуска исходного процесса.)
Проблема в том, что после execv
, этот новый процесс больше не отвечает на kill
, отправленный сценарием bash.
Существует ли способ, позволяющий выполнению этого исходного сценария (и последующей сигнализации) также отправлять сигнал вновьexec
также обрабатываете?