Я написал скрипт bash для проведения некоторых тестов в моей системе.Тесты проходят в фоновом режиме и параллельно.Тесты могут занять много времени, и иногда мне может потребоваться прервать тестирование на полпути.
Если я удерживаю Control + C, то он прерывает родительский сценарий, но оставляет работающие различные дочерние элементы.Я хочу сделать так, чтобы я мог нажать Control + C или иным образом выйти и затем убить все дочерние процессы, работающие в фоновом режиме.У меня есть немного кода, который выполняет эту работу, если я запускаю фоновые задания прямо из терминала, но это не работает в моем скрипте.
У меня есть минимальный рабочий пример.
Я пытался использовать trap в сочетании с pgrep -P $$.
#!/bin/bash
trap 'kill -n 2 $(pgrep -P $$)' 2
sleep 10 &
wait
Я надеялся, что при нажатии control + c (SIGINT) уничтожит все, что запускает скрипт, но на самом деле он говорит:
./breakTest.sh: line 1: kill: (3220) - No such process
Это число изменяется, но, похоже, оно не относится ни к каким запущенным процессам, поэтому я не знаю, откуда оно.
Я предполагаю, что содержимоеКоманда trap оценивается там, где происходит команда trap, тогда она может объяснить результат.Pid 3220 может быть для самого pgrep.
Буду признателен за понимание здесь
Спасибо