Написал бесконечный цикл для симуляции вашего дрожания:
subtask.sh
#!/bin/bash
while true
do
date -R
sleep 1
done
Основной скрипт для запуска подзадачи и ожидания в течение 100 секунд в ожидании Ctrl-C:
#!/bin/bash
trap 'kill $subpid; exit' SIGINT
./subtask.sh &
subpid=$!
sleep 100
результат:
$ ./main.sh
Mon, 06 May 2019 02:03:32 -0700
Mon, 06 May 2019 02:03:33 -0700
^C$
Когда я нажимаю Ctrl-C «^ C», он останавливается после печати двух строк.
Если основная оболочка завершена, идентификатор родительского процесса подзадачи станет 1, поэтому он больше не сможет передавать сигнал фоновому процессу.
Я думаю, что в качестве обходного пути можно записать только PID подзадачи в файл и уничтожить pid, когда вы хотите завершить их ..