Предположим, у меня есть два потока ядра Linux, главный поток и рабочий поток. Мастер создает kthread_run()
для создания рабочего. Пока рабочий принимает соединение сокетов и блокировку, мастер-вызовы kthread_stop()
, чтобы остановить работника.Как остановить блокировку потока ядра Linux
Поскольку работник блокируется при принятии операции и не может выйти, kthread_stop()
внутри мастера не вернется.
Что мне делать, чтобы убить рабочий поток из мастера грациозным способом? Благодарю.
Является ли рабочий поток блокирующим ваш собственный код или блокирование где-то еще в ядре? –
Рабочий поток блокируется в ядре, как чтение или работа в сети. – KyL
Если это не в вашем коде, вероятно, вы вряд ли сможете это сделать. Я подозреваю, что рабочий поток разбужен вызовом 'kthread_stop()', проверяет, произошло ли условие, в котором оно ожидает, решает, что это еще не произошло, и возвращается в состояние ожидания. Чтобы изменить его поведение, вам нужно будет изменить проверочный код, чтобы проверить результат 'kthread_should_stop()' и предпринять соответствующие действия. –