
|
Le système UNIX
TD 5 - Les processus
|
C.
Drocourt
I.U.T. Amiens
drocourt@iut-amiens.fr
|
– Un processus est l’exécution d’un programme
à un moment donné. Un processus va donc naître,
vivre et mourir.
– Tout utilisateur peut connaître à tout
instant tous les processus gérés par le système en
consultant la table des processus par l’intermédiaire de la
commande ps.
– Un utilisateur peut envoyer à ses propres
processus un certains nombres de signaux, destinés en
général à les tuer, grâce à la
commande kill.
Exercice 1 : Avant-plan et arrière-plan
Expérimenter les commandes suivantes
$sleep 10
$sleep 10 &
Comparer les deux commandes et remarquer que le & lance la commande
sleep 10 en arrière-plan : le terminal d'attachement n'est plus
monopolisé et rend immédiatement la main.
Exercice 2 : les signaux
Les différents signaux définis sur le système
Les différents signaux disponibles sont
répertoriés dans le fichier include
/usr/include/sys/signal.h. La commande kill –l permet également
d’en obtenir la liste.
Noter les valeurs et l’utilisation des principaux signaux disponibles.
Les signaux envoyés depuis le clavier
La commande stty –a donne les raccourcis clavier des signaux que l’on
peut envoyer à des processus tournant en avant-plan (signaux
SIGINT, SIGQUIT, SIGHUP)
Le signal SIGINT peut être envoyé à un processus en
avant-plan (foreground) par la frappe du caractère <intr>.
Donner la valeur de ce caractère.
Le signal SIGQUIT peut être envoyé à un processus
en avant-plan par la frappe du caractère <quit>. Donner la
valeur de ce caractère. Remarquer qu'il n'est pas pratique.
Le signal SIGHUP est envoyé par exemple à tous les
processus en arrière-plan (background) lorsque l’utilisateur se
déconnecte en tapant le caractère <eof>. Donner la
valeur de ce caractère.
Exercice 3 : Tuer un processus
Tuer un processus en avant plan
La plupart des processus lancés en avant-plan peuvent être
tués depuis leur terminal d’attachement à l’aide d’un des
signaux SIGINT et SIGQUIT.
On peut également tuer un processus en avant-plan depuis un
autre terminal en se connectant sous son propre nom et en envoyant
à ce processus un signal grâce à la commande kill.
Par exemple, kill –2 <pid> a le même effet que la frappe de
<intr> sur le terminal d’attachement du processus.
Lancer la commande sleep 100 en avant-plan et la tuer à l’aide
des deux méthodes décrites ci-dessus.
Tuer son propre shell
Le signal SIGHUP et SIGKILL sont seuls capables de tuer un shell de
connexion.
Tuer un processus en arrière plan
Lancer la commande sleep 100 en arrière-plan et essayer de la
tuer à partir du clavier à l’aide des SIGINT et SIGQUIT.
Possible ?
Essayer ensuite de tuer cette commande avec la commande kill à
partir du terminal d’attachement.
Exercice 4 : L’enchaînement de processus
Enchaînement
Il est possible d’enchaîner des processus de façon
totalement indépendante et en séquence. Le
déroulement d’un processus n’influe pas sur celui du suivant. Le
processus suivant est lancé à la fin de
l’exécution du précédent. Pour cela, on
sépare chaque commande par un point-virgule.
Essayer, par exemple :
$date ; cat tagada ; echo fin de commande composée.
Enchaînement en arrière-plan
Il est nécessaire de parenthèser.
Essayer :
$(sleep 300 ; date)&
Exercice 5 : Le contrôle de jobs
Les commandes
Le contrôle de jobs utilise un caractère spécial
supplémentaire <susp> dont la frappe cause l’arrêt
(et non pas la mort) du processus en avant-plan.
Retrouver la valeur de ce caractère.
Le contrôle de jobs est réalisé seulement avec
trois commandes :
· fg %i pour faire passer le processus de job
i d’arrière-plan en avant-plan.
· bg %i pour faire passer le processus de job
i d’avant-plan en arrière-plan.
· jobs pour connaître les jobs actifs
(option l pour le format long).
Lancer la commande sleep 100 en avant-plan, la stopper, puis la passer
en arrière-plan. Utiliser la commande ps –l pour regarder ce qui
se passe en examinant particulièrement l’état du
processus (colonne S).
Enfin, tuer cette commande en utilisant la commande kill suivie du
numéro de job
(ex: kill %1, si 1 est le numéro de job de sleep).