Les processus
partie 2
Les signaux
• Certaines événements (erreur, interruption de clavier tq: ctrl c, ctrl d,…)
peut être redirigé à un processus à l’aide d’un signal.
• Ce mécanisme permet la communication interprocessus
interprocessus, notamment
entre le système d’exploitation et le processus en cours d’exécution .
Les principaux signaux sont :
Numéro Nom Signification
1 SIGHUP Arrêt
2 SIGINT Interruption
9 SIGKILL Terminaison (non ignoré)
15 SIGTERM Fin de programme
24 SIGSTOP Stopper l’exécution
Par exemple :
• Si vous lancez une commande et que vous appuyer les
touches CTRL-Z le processus en cours d’exécution recevra
le signal numéro 24 (SIGSTOP) Alors le processus stoppera
son exécution.
• Une déconnexion provoquera l’envoi du signal 1 (SIGHUP) à
tous les processus.
• Lorsque vous appuyez CTRL-C, vous envoyez un signal 2
(SIGINT) au processus courant.
Contrôle des processus ( suite)
•kill : envoyer un signal à un processus
•Killall : arrêter un processus
•fg : mettre le processus en avant-plan.
•bg : mettre le processus en arrière-plan.
•jobs :connaitre les commandes qui tournent en arrière plan.
•nohup : rendre le processus non sensible à la déconnexion
La commande kill
Cette commande permet d’envoyer un signal à un processus
Par défaut , elle envoie le signal 15 SIGTERM ( arrêter un processus )
Syntaxe :
kill SIGNAL PID_PROCESSUS
• Exemple :
$kill 2010 : Arrêter le processus ayant le PID 2010
$kill -9 2010 : Forcer la terminaison (signal non ignorée )
Pour connaitre tous les signaux disponible sous votre système alors utiliser la
commande kill –l
La commande killall
• Permet d’arrêter un processus et toute son arborescence en donnant le
nom du processus
Syntaxe :
killall NOM_DU_ PROCESSUS
• Exemple :
$killall gedit : ( arrêter le processus ‘gedit’ et tous ses ancêtres )
Tâches en arrière plan et en avant plan
• L’exécution de certaines commandes monopolisent le terminal et on
ne peut pas exécuter d’autre commandes;
c’est le mode d’exécution par défaut des commandes: c’est une
exécution en avant plan
On peut lancer les processus en arrière
arrière--plan, la syntaxe est:
$commande &
$
Là, on peut continuer à travailler sur le système sachant que le
processus lancé est en cours d’exécution en arrière plan.
Exemple
$cp file.mp4 /tmp/mp4/ &
Si le fichier est très grand , alors sa copie prend beaucoup de
temps et on ne peut pas lancer d’autres commande;
il vaut mieux lancer le processus en arrière plan pour
récupérer le shell afin de lancer d’autres commandes .
Tâches en arrière plan et en avant plan
La commande « jobs » :
permet de visualiser la liste des processus en arrière plan ;
On peut faire basculer le processus entre le mode en arrière plan et le
mode en avant plan :
– Pour rendre un processus en avant plan (foreground
foreground) on utilise la
commande : $fg
– Pour rendre un processus en arrière plan (backgrround) on utilise
la commande : $bg
Exemple :
• Lancer la commande de l’éditeur gedit comme suit : gedit &
• Lancer la commande de l’horloge comme suit: xclock &
Ce ci permit d’exécuter les processus gedit et xclock en arrière plan,
Et on peut récupérer le shell afin de lancer d’autre commande.
$ps
5432 tty1 gedit
5433 tty1 xclock
$ jobs //Affiche les processus en arrière plan
[1] Running gedit
[2] Running xclock
$fg 1 // Récupérer le processus en arrière plan ayant le
numéro 1 il devient un processus en avant plan
$ jobs
[2] Running xclock
La Commande nohup
Lorsqu’un processus long est lancé et que l’utilisateur veut fermer
sa session;
Alors ce processus sera arrêté et il faudra tout relancer à la
prochaine ouverture de session !!
Le moyen d’éviter cela est de lancer le processus de manière que la
fermeture de session n'entraine pas l'arrêt du processus: c'est-à-dire
l'exécution de processus n'est pas arrêtée à la déconnexion.
Ce ci est possible grâce à la commande « nohup »
La Commande nohup
No Hang Up : l'exécution de commande n'est pas arrêtée à la déconnexion.
La syntaxe est comme suit :
nohup commande &
Par défaut les canaux de sortie et d’erreur standards sont redirigés vers
un fichier nohup.out, sauf si la redirection est explicitement précisée
comme suit:
nohup commande > myfile &
Dans ce cas; la sortie de la commande est dirigée vers le fichier myfile.
Exemple
$ nohup wget www.esi.dz/ubuntu/ubuntu-12.4.iso > /tmp &
$exit
Ceci permet de lancer un téléchargement (commande wget )
depuis le serveur www.esi.dz
• Un tel processus reste en cours d’exécution même après la fermeture
de session.
Après avoir reconnecté, ce processus ne sera attaché à une console
donnée : tty1, tty2…etc;
Quant on visualise les processus en cours d’exécution ( ps –u) le
champ de tty reçoit cette valeur « ? »
Conclusion
• Un processus est un programme en cours d’exécution
• Un processus passe par plusieurs états durant sa vie.
• Il est identifié par un PID , on peut avoir une arborescente de
processus fils.
• Un processus peut être exécuté en avant et/ou en arrière plan,
• Plusieurs commandes pour la gestion et le contrôle de
processus ( ps ,top, kill , nohup ,……….)
C’est important
important de savoir manipuler, surveiller et contrôler les
processus sur votre machine !!!!