Чтобы избежать использования вашего USB-контроллера, вы можете усилить свою программу, чтобы лучше справляться с ее завершением.
Создайте процедуру, которая будет выполнять очистку, т. Е. Закрытие USB-соединения.
Давайте назовем это void cleanup(void) {}
Вы можете использовать функцию atexit
из stdlib.h для регистрации функции, которая будет вызываться при завершении программы , обычно . Это означает, что через exit
или return
в основном. Смотрите atexit man page
Например: int res = atexit(cleanup);
В случаях, когда ваша программа прерывается нерегулярно, например, через сигнал (например, SIGINT, когда вы нажимаете Ctrl + c), вы должны реализовать обработчики сигналов, чтобы справиться с этим. По сути, вы можете создать одну функцию-обработчик сигналов, которая будет вызывать только вашу процедуру очистки и регистрировать ее для всех сигналов, с которыми вы хотите иметь дело.
Подробнее о том, как это сделать: учебник по обработке сигналов
Если ваша программа была прервана таким образом, который не может быть обработан, например, с помощью SIGKILL, вам придется либо перезагрузиться, либо посмотреть методы в посте, на который pmg ссылается в своем комментарии - они выглядят многообещающими .