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 :

INT

Demande au programme de s'interrompre immédiatement, quitte à perdre des données.

STP

Met le processus en pause.

QUIT

Interromps le processus plus brutalement que INT.

KILL

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

SIGINT

Ctrl+Z

SIGSTP

Ctrl+J

SIGQUIT

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.

1
$ xeyes
2
^Z
3
[1]+  Arrêté                xeyes
4
$ bg
5
[1]+ xeyes &
6
$ 

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.

1
$ xeyes &
2
[1] 13507
3
$ jobs
4
[1]+  En cours d'exécution   xeyes &
5
$ kill %1
6
$ 
7
[1]+  Complété              xeyes
8
$

À 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.