Предполагая, что обработка в func_2 выполняется с помощью внешней программы (см. Оператор sleep в примере ниже), вы можете использовать 'trap' для захвата ctrl / C (на самом деле SIGINT, согласно комментариям выше от @anishsane)
Обратите внимание, что явное завершение внешнего процесса выполняется путем отправки сигнала этому дочернему элементу.
#! /bin/bash
func_1() {
echo "In func_1"
sleep 100 &
# Save the PID of the external program
X=$!
trap 'kill -INT $X' INT
# Wait for the external program to finish/get killed.
wait
echo "resume func_1"
}
func_2() {
echo "In func_2"
func_1
echo "resume func_2"
}
func_2
Если вы можете выполнить приведенный выше сценарий и ввести "ctrl / C", вывод будет:
In func_2
In func_1
^Cresume func_1
resume func_2