4. 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 » ou nice value en anglais). Cette valeur peut varier de -20 (priorité la plus haute) à 19 (priorité la plus basse). Si elle n'est pas définie, tous les processus s'exécutent avec une priorité de 0 par défaut (la priorité de planification de « base »). Les processus ayant la priorité maximale (la valeur la plus basse, jusqu'à -20) s'exécutent plus souvent que les processus ayant une priorité inférieure (jusqu'à 19), et se voient ainsi offrir plus de temps processeur. Les utilisateurs autres que le super-utilisateur (root) ne pourront que diminuer la priorité de leurs processus dans la fourchette 0 à 19. Le super-utilisateur pourra quant à lui définir de manière arbitraire la priorité de n'importe quel processus.

4.1. 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 ...]

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 pendant que ce processus tourne vous souhaitez jouer à un jeu qui nécessite que vous libériez des ressources système. Tapez alors :

$ renice +15 785 

Ainsi, le processus durera sans doute plus longtemps, mais il n'empruntera pas de temps processeur aux autres processus.

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.

4.2. 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 s'accomplit grâce à la commande nice.

Il suffit de placer votre commande en argument de la commande nice. Utilisez l'option -n pour assigner une priorité. Par défaut, nice assigne une priorité de 10.

Par exemple, si vous souhaitez créer une image ISO à partir du CD-ROM d'installation de Mandrakelinux, 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. Pour 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