Проблема с завершением программы Python при прерывании клавиатуры при вызове многопоточной библиотеки C++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Проблема с завершением программы Python при прерывании клавиатуры при вызове многопоточной библиотеки C++

Сообщение Anonymous »

Мое приложение Python вызывает динамическую библиотеку C++ (.dll). Эта библиотека создает и управляет несколькими потоками во время ее выполнения.
Когда я пытаюсь остановить программу с помощью KeyboardInterrupt (Ctrl+C), возникают следующие проблемы:
Прерывание перехватывается, но не обрабатывается: интерпретатор Python правильно получает сигнал KeyboardInterrupt и выводит соответствующее сообщение на терминал. Однако программа не завершается должным образом.
Терминал зависает: терминал полностью перестает отвечать на любые дальнейшие действия после отображения сообщения о прерывании.
Особый процесс: процесс Python остается активным в фоновом режиме. Он продолжает потреблять системные ресурсы, включая память и дескрипторы файлов.
Невозможно завершить процесс с помощью диспетчера задач: процесс нельзя завершить стандартными средствами, такими как диспетчер задач Windows. Команда «Завершить задачу» не дает никакого эффекта.
Поведение Обозревателя процессов: я использовал Обозреватель процессов для исследования состояний потоков. Интересно, что как только я выбираю процесс Python в Process Explorer, он немедленно завершается. Если я не взаимодействую с ним через Process Explorer, процесс продолжается бесконечно.
Такое поведение убедительно свидетельствует о том, что потоки, созданные библиотекой C++, не завершаются корректно или неправильно обрабатывают сигнал завершения, распространяемый интерпретатором Python. Это оставляет основной процесс в зомби-подобном или неубиваемом состоянии до тех пор, пока внешняя проверка (например, из Process Explorer) не приведет к его завершению.
Ожидаемое поведение заключается в том, что приложение должно обработать сигнал SIGINT (запускаемый нажатием Ctrl+C), чтобы инициировать корректное завершение работы. Этот процесс должен включать правильное освобождение всех выделенных ресурсов, таких как дескрипторы файлов, память, а также завершение любых фоновых потоков, созданных библиотекой C++.

Подробнее здесь: https://stackoverflow.com/questions/797 ... ng-a-multi
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»