KA3AKOB
Пользователь
Сообщений: 54
|
|
« : 07 Декабрь, 2017, 11:10:00 » |
|
Отлаживаю драйвер из среды Momentics 4.7 на удалённом процессоре Fastwel CPC304. После нажатия кнопки Terminate в окне Debug продолжают оставаться зелёными потоки отладчика и собственно драйвера. В драйвере используется вызов InterruptAttachEvent, то есть вся реальная работа происходит в безопасном потоке, моём потоке. Тем не менее, система удалённого процессора подвисает и единственный способ возобновить работу - это нажать кнопку Reset на процессоре. Какой сигнал получает приложение (драйвер)от среды Momemntics через qconn, чтобы я мог его перехватить, нормально завершить все потоки и не подвешивать систему? Предполагаю, что драйвер с потоками (pthread_create(...)) получает особые привилегии через ThreadCtl(_NTO_TCTL_IO,0) и поэтому не может быть остановлен как обычное приложение.
|
|
« Последнее редактирование: 07 Декабрь, 2017, 14:30:28 от KA3AKOB »
|
Записан
|
|
|
|
Игорь Рондарев
Модератор
Опытный пользователь
Сообщений: 281
Сотрудник СВД ВС
|
|
« Ответ #1 : 11 Декабрь, 2017, 15:33:10 » |
|
Среда разработки использует сигнал 9 (SIGKILL) для завершения работы приложений, запущенных на целевой системе. Воспроизводится ли данная ситуация (с "зависанием") при завершении работы драйвера в процессе работы отладочной сессии с помощью внешних утилит kill или slay (например, slay -sKILL <pid_драйвера>, slay -sTERM <pid_драйвера>)?
|
|
|
Записан
|
|
|
|
KA3AKOB
Пользователь
Сообщений: 54
|
|
« Ответ #2 : 12 Декабрь, 2017, 17:02:56 » |
|
Нет, не воспроизводится. Если переношу файл с двоичным кодом драйвера на целевой процессор и через telnet его запускаю, то kill -9 не валит систему. Но тогда отладка никакая. А мне надо бы, при получении некоего сигнала, понятно, что не SIGKILL, аккуратно закрыть порты на внешнем устройстве, отключить прерывания, завершить все потоки и главный поток драйвера.
|
|
|
Записан
|
|
|
|
Игорь Рондарев
Модератор
Опытный пользователь
Сообщений: 281
Сотрудник СВД ВС
|
|
« Ответ #3 : 13 Декабрь, 2017, 13:21:59 » |
|
А если команду kill -9 на целевой машине выполнить непосредственно в процессе работы отладочной сессии (т.е. при работающем GDB)? Также попробуйте предварительно отключаться (кнопка Detach) перед остановкой приложения. Как поведёт себя система в данном случае?
|
|
« Последнее редактирование: 13 Декабрь, 2017, 13:48:57 от Игорь Рондарев »
|
Записан
|
|
|
|
KA3AKOB
Пользователь
Сообщений: 54
|
|
« Ответ #4 : 15 Декабрь, 2017, 16:23:03 » |
|
Кнопка Detach в моём варианте настроек среды (QNX® Momentics® Integrated Development Environment Version: 4.7.0 Build id: 201006232051) отсутствует. Наличествует кнопка Disconnect. Однако, в настоящий момент эффект зависания системы отсутствует. Воспроизвести его по неизвестной мне причине не удаётся пока. Тем не менее, вопрос, как аккуратно завершить все потоки драйвера, если перехватить сигнал kill -9 в самой программе не удастся, остаётся.
|
|
« Последнее редактирование: 15 Декабрь, 2017, 18:48:18 от KA3AKOB »
|
Записан
|
|
|
|
|