Конечно можно регистрировать функцию завершения register_shutdown_function() и вней завершать дочерние процессы, но при "определённом закрытии" скрипта эта функция не выполняется.
Для гарантированого завершения дочерних процесов можно применить 2 методики.
1) Основной скрипт создаёт временный файл и записывает туда текущее время, с интервалом не более 10 сек. Дочерние скрипты проверяют сравнивают текущее время с временем записаном в файле и если разница превышает 20 секунд то завершают свою работу.
2) Если нет возможности модифицировать дочерние скрипты, то
Основной процесс, создаёт временный файл и лочит его flock($h,LOCK_EX).
Основной процесс, запускает супервизор, написаный на том же php.
Супервизор запускает дочерние процессы proc_open(), получает их id.
Супервизор раз в секунду пытается залочить временный файл, @flock($h,LOCK_EX+LOCK_NB). Если залочить удалось то суперизор завершает дочерние скрипты proc_terminate()