Chaque processus actif sur le système s'exécute avec une priorité donnée (aussi appelée valeur amicale ou nice value en anglais). Cette valeur peut 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 quant à lui définir de manière arbitraire la priorité de n'importe quel processus.
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 ...] |
La priorité équivaut à la valeur numérique de la priorité, PID (précédé de -p pour une liste de PID) représente l'ID du processus, pgrp indique (-g pour plusieurs) l'ID du groupe du processus, et utilisateur (ou -u pour plusieurs utilisateurs) représente le nom d'utilisateur du propriétaire du processus.
Supposons que vous veniez de lancer un processus auquel a été attribué le numéro PID 785, lequel lance une longue opération scientifique, et que vous souhaitiez jouer à un jeu pendant que ce processus tourne. Vous tapez alors :
$ renice +15 785 |
Ainsi, 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.
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 s'accomplit 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 (priorité minimale).
Par exemple, si vous souhaitez 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 peut 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 susmentionné. Utilisez la commande r depuis l'interface de top pour changer la priorité du processus sélectionné.