Contrôler la priorité des processus : nice, renice

Chaque processus actif sur le système s'exécute avec une priorité donnée (aussi appelée valeur amicale «nice value»). Cette valeur peux varier de -20 à +20. La priorité maximale pour un processus est -20. Si elle n'est pas définie, tous les processus s'exécute avec une priorité de 0 par défaut (la priorité de planification de «base»). Les processus ayant la priorité maximale utilisent plus de ressources système que les autres. Les processus ayant une priorité inférieure s'exécuteront lorsque le système sera libéré par les tâches de priorité plus élevée. Les utilisateurs autres que le super-utilisateur root ne pourront que diminuer la priorité de leurs processus dans la fourchette 0 à 20. Le super-utilisateur pourra quand à lui définir de manière arbitraire la priorité de n'importe quel processus.

renice

Si un ou plusieurs processus prennent d'assaut toutes les ressources du système, vous pouvez changer leur priorité au lieu de les tuer. On utilise alors la commande renice. Sa syntaxe est la suivante :

renice priorité [[-p] pid ...] [[-g] pgrp ...] [[-u] utilisateur ...]

avec priorité étant la valeur numérique de la priorité, PID (précédé de -p pour une liste de PID) l'ID du processus, pgrp (-g pour plusieurs) l'ID du groupe du processus, et utilisateur (ou -upour plusieurs urilisateurs) le nom d'utilisateur du propriétaire du processus.

Supposons que vous venez de lancer un processus auquel a été attribué le numéro PID 785, lequel lance une longue opération scientifique, et vous souhaitez jouer à un jeu pendant que ce processus tourne. Vous tapez alors :

$ renice +15 785 

Avec ça le processus durera sans doute plus longtemps, mais il ne vous empêchera pas de profiter d'une animation fluide pour votre jeu en laissant la priorité au jeu lorsqu'il en a besoin.

Si vous êtes l'administrateur d'un système partagé et constatez qu'un des utilisateurs lance beaucoup de processus accaparant les ressources du système, Vous pouvez changer la priorité de tous les processus de cet utilisateur avec la commande :

# renice +20 -u pierre

Après cela, tous les processus de pierre auront une priorité plus basse et ne bloqueront pas les processus des autres utilisateurs.

nice

Maintenant que vous savez que vous pouvez changer la priorité des processus, vous voudrez peut-être lancer une commande avec une priorité prédéfinie. Cela est accompli grâce à la commande nice.

Il suffit de placer votre commande en argument de la commande nice. Par défaut nice assigne une priorité de 10. Vous pouvez utiliser l'option -n pour assigner une priorité quelconque dans la fourchette -20 (priorité maximale) à 19 (minimale).

Par exemple, si vous souhaiteez créer une image ISO à partir du CD-ROM d'installation de Mandrake Linux, vous utilisez d'habitude :

$ dd if=/dev/cdrom of=~/mdk1.iso

Mais sur certains systèmes avec un lecteur CD-ROM IDE standard, le fait de copier de grands volumes de données peux utiliser énormément de ressources. Afin que cela n'empêche pas les autres personnes ou processus de fonctionner correctement, on peut démarrer le processus de copie avec une priorité affaiblie :

$ nice -n 19 dd if=/dev/cdrom of=~/mdk1.iso

et continuer avec d'autres tâches courantes.

Pour modifier la priorité d'un processus vous pouvez aussi utiliser l'utilitaire top décrit ci-dessus. Utilisez la commande r depuis l'interface de top pour changer la priorité du processus sélectionné.