Commandes de gestion des processus
Les deux commandes ps et kill sont utilisées pour la gestion des processus.
La commande ps
affiche des informations sur les processus actifs. Sans options, elle affiche les processus du même terminal que le processus ps. La sortie contient uniquement le pid du processus, le nom du terminal, le temps cumulé d’exécution et le nom de la commande.
Les options les plus courantes sont :
- -a
- liste tous les processus sauf ceux non associés à un terminal ;
- -e
- liste tous les processus du système ;
- -f
- donne plus d’information pour chaque processus ;
- -u uidlist
- liste les processus des utilisateurs donnés dans uidlist.
La commande top
affiche les mêmes informations que ps en rafraîchissant périodiquement l’affichage.
La commande kill
permet d’envoyer un signal à un processus. Deux syntaxes sont disponibles :
- kill -s nomdesignal pid...
- envoie le signal dont le nom est nomdesignal aux processus dont on donne le pid ;
- kill -numerodesignal pid...
- envoie le signal de numéro numerodesignal aux processus dont on donne le pid.
Un signal peut donc être nommé symboliquement (kill -l donne la liste des noms) ou par son numéro. Nous utiliserons ici le signal KILL de numéro 9 qui permet de tuer un processus.
Exercice 6 (À vos marques, prêts...) Afin de mettre en évidence le partage du temps processeur entre les processus prêts, construisez un programme figurant une course entre processus ; ce programme doit
- créer dix fils ;
- chacun des fils compte jusqu’à 5 millions, affiche un message; compte à nouveau jusqu’à 5 millions ;
- attendre après ses 10 fils et afficher leur ordre d’arrivée.
Fonction system()
La fonction de la bibliothèque standard
#include <stdlib.h> int system (const char *command);exécute la commande command et retourne après sa terminaison. La valeur de retour de la commande sous la forme habituellement retournée par wait() est retournée, la valeur -1 en cas d’erreur.
Exercice 7 (Observation de processus) Il s’agit d’écrire un programme à plusieurs processus qui effectue la tâche suivante. Le processus père crée N processus fils. Chaque processus fils réalise dans une boucle infinie les instructions suivantes :
- afficher son pid pour préciser qu’il est toujours vivant ;
- s’endormir pour 5 secondes grâce à la fonction de la bibliothèque standard sleep() ;
Le processus père, après avoir créé tous ses fils, affiche les processus actifs du terminal et ce à l’aide de la commande ps (voir l’encart). Pour cela, il fera appel à la fonction system() qui permet d’invoquer une commande Shell (voir l’encart). Puis, jusqu’à ce qu’il n’ait plus de fils, il exécutera le code suivant :
- attendre la terminaison d’un fils ;
- afficher le pid du fils terminé.
Question 1 (Préparez) Donnez, sous forme de pseudo-code, la structure de ce programme.Explicitez, a priori, son comportement.
Question 2 (Exécutez) Utilisez la commande kill pour terminer les processus fils.Que se passe-t-il si vous tuez le processus père ?
Question 3 (Observez) Modifiez le programme de telle façon que le processus père attende, par exemple sur une saisie clavier, avant de commencer à attendre la terminaison de ses processus fils à l’aide de wait().
![]()
![]()
![]()