Signaux et jobs
Objectifs
Savoir ce qu'est un signal
Faire la différence entre un processus et un job
Processus et signaux
Le noyau peut vouloir transmettre des signaux à un processus pour diverses raisons, tel que lui dire de s'arrêter ou de se mettre en pause. Par défaut, les processus vont réagir accordement mais certain signaux peuvent être interceptés.
On peut également envoyer des signaux à partir du terminal, pour cela on a la commande kill -SIG PID
qui permet d'envoyer le signal SIG
au programme PID
. Il existe par exemple :
| Demande au programme de s'interrompre immédiatement, quitte à perdre des données. |
| Met le processus en pause. |
| Interromps le processus plus brutalement que |
| Arrête le processus sans même lui demander son avis. |
Il existe également des raccourcis clavier qui, quand tapés dans un terminal avec une commande lancée, permettent d'envoyer des signaux au processus en cours :
Ctrl+C |
|
Ctrl+Z |
|
Ctrl+J |
|
Ctrl+] | ?? |
Exemple :
Après avoir installé sl
(sudo apt install sl
), lancez la commande et essayez de l'arrêter avec Ctrl+C. Le train continue de passer, mais essayez avec Ctrl+], que se passe t-il d'après vous ?
Jobs
Depuis le début on lance en fait les commandes en premier plan. Mais il est également possible de les lancer en arrière plan pour continuer de travailler avec son shell après. Pour cela, il suffit d'ajouter & à la fin de la commande.
Une autre technique est de mettre en pause le processus avec Ctrl+Z, puis d'utiliser la commande bg
, qui va passer le processus ainsi endormi en background.
$ xeyes
^Z
[1]+ Arrêté xeyes
$ bg
[1]+ xeyes &
$
Le processus est ainsi transformé en ce que l'on va appeler un job. On peut les lister avec jobs
, les ramener au premier plan avec fg
, ou les tuer avec kill
.
$ xeyes &
[1] 13507
$ jobs
[1]+ En cours d'exécution xeyes &
$ kill %1
$
[1]+ Complété xeyes
$
À retenir
Tout les programmes créent des processus sur la machine pour pouvoir exécuter des instructions. Ces processus consomment des ressources (mémoire vive, temps processeur) qui sont réparties par le système d'exploitation. Il est possible de lister les processus et leur utilisation des ressources avec la commande htop
, pour identifier d'éventuels processus trop gourmands.