Здесь есть несколько моментов. Планировщик Linux достаточно умен, чтобы предотвратить заблокированную задачу. Это означает, что если вы вызываете receive () и ничего не ожидает получения, ваша задача, вероятно, будет переведена в спящий режим до того времени, когда вызов вернется. Вам не нужно обрабатывать планирование; ядро Linux сделает это за вас.
Тем не менее, если вам нужно знать, заблокирована ли ваша задача из какого-либо приложения-демона, если вы хотите написать LKM, почему бы просто не включить задачу в интересующий вас список задач и проверить его состояние?
Конечно, простая проверка состояния задачи может не сказать точно, чего вы хотите. Если ваше состояние задачи TASK_INTERRUPTIBLE
, оно говорит вам только о том, что ваша задача ожидает что-то , но выяснить, что это такое, может быть не просто. Точно так же ваша задача может находиться в состоянии TASK_RUNNING
и фактически не работать в ЦП в текущий момент (но, по крайней мере, в состоянии TASK_RUNNING
вы знаете, что ваша задача не заблокирована).