Comment les tâches peuvent-elles «refuser de geler» en cas de suspension?

17

Hier, lors de la fermeture de mon ordinateur portable, il n'est pas passé immédiatement en mode veille. Selon les journaux, il essayait, mais une tâche a refusé de geler:

Freezing of tasks failed after 20.005 seconds (1 tasks refusing to freeze, wq_busy=0):

Cela a duré quelques heures jusqu'à ce que le système soit suspendu. Le syslogétait plein de messages comme dans cette question , car systemdessayait encore et encore.

Comment cela peut-il arriver? Pourquoi le planificateur ne peut-il pas simplement arrêter de planifier cette application? et puis il est effectivement gelé? J'ai lu qu'il y a plusieurs STOPcommandes, l'une d'entre elles demandant gentiment et l'autre forçant le gel. Pourquoi ne l'avez-vous systemdpas utilisé ou pourquoi cela n'a-t-il pas fonctionné ici?

piegames
la source

Réponses:

25

Le gel des tâches est documenté en détail dans la documentation du noyau .

Les processus de l'espace utilisateur ne peuvent pas refuser de geler; ils sont gelés, mais la signalisation entre le noyau et les processus est gérée automatiquement par le code de gestion du signal (le gel utilise un faux signal).

Si vous voyez des messages «tâches refusant de geler», cela signifie qu'un thread du noyau refuse de geler, généralement parce qu'il fait quelque chose qui ne peut pas être vérifié. Cependant, avoir à attendre plusieurs heures pour que le noyau soit suspendu n'est pas normal; les traces de pile dans les messages du journal aideraient à se faire une idée de ce qui ne va pas.

Stephen Kitt
la source