Les Processus UNIX
* Processus = programme + données + CPU
* Chaque commande déclenche un processus (si le nom de la commande est trouvé -> PATH)
* A un instant, un seul processus actif
* Le processus actif est changé (swapped) un grand nombre de fois par seconde
* Un même utilisateur peut lancer plusieurs processus
* Chaque processus est identifiable par un numéro, le PID (process Identification)
La Commande ps
* Permet de visualiser l’ensemble des processus existants sur la machine
* Les options varient d’un système l’autre (voir “man“)
* Principales options
BSD : “-aux“ (liste de tous les processus avec le nom de leur propriétaire)
SYSTEM V : “-edf“ (équivalent)
$> # liste des process qui m’appartiennent
$> ps
PID TTY TIME CMD
18156 pts/29 00:00:00 bash
21199 pts/29 00:00:00 ps$> # ps ‘full’
# liste des process qui m’appartiennent avec noms user, PPID et parametres de commande
$> ps -f
UID PID PPID C STIME TTY TIME CMD
oracle 18156 18137 0 11:38 pts/29 00:00:00 -bash
oracle 21218 18156 0 13:16 pts/29 00:00:00 ps -f
$>$> # tous les process (sauf kernel)
$> ps -ef
UID PID PPID C STIME TTY TIME CMD
root 27340 893 0 10:36 ? 00:00:00 /usr/sbin/sshd
root 27342 27340 0 10:36 pts/32 00:00:00 -bash
root 27433 27431 0 10:36 pts/33 00:00:00 -bash
root 7093 2143 0 11:09 ? 00:00:00 smbd -D
…
Principaux Attributs d’un processus
Tous ces attributs ne sont pas forcément montrés par la commande ps, cela dépend des options…
- UID : l’idenfiant du user propriétaire du process
PIDprocess ID, l’identifiant, c’est un integer.PPIDou parent process ID, identifie le process père- C : utilisation du CPU
- Nice number, utile à la gestion des priorités
- TTY, le terminal auquel est connecté le processus
RUID, ou real user ID. l’utilisateur ayant lancé la commandeEUID, ou effective user ID. détermine les permissions utiliséesRGID, ou real group owner : le groupe de l’utilisateur réel- STIME : heure de début
- TIME : temps total d’exécution
- CMD : programme ou commande exécutée
La Commande kill et les signaux
* Permet de supprimer un processus qu’on ne contrôle plus (programme qui boucle …)
* L’argument de la commande est le PID du (des) processus qu’on désire supprimer
$ kill 12345
$ kill -9 54321
Par défaut la coimmande kill envoie un signal d’arret au processus mais il est possible d’envoyer d’autres interruptions avec la commande
$> kill -signal no_process
Le signal peut être considéré comme un événemnt envoyé au process par un autre process, un suer ou le noyau. Il y en a une trentaine différents, référencables par leur nom ou par un numéro. Citons les + utiles :
Voir commande : kill -l ou man 7 signal pour + d’infos
Voici une liste des signaux standards (POSIX) :
Signal | Valeur | Action | Commentaire ---------+----------+--------+------------------------------------------ SIGHUP | 1 | A | Raccrochement (déconnexion) sur terminal | | | de contrôle, ou mort du processus | | | de contrôle. SIGINT | 2 | A | Interruption depuis le clavier. SIGQUIT | 3 | A | Demande 'Quitter' depuis le clavier. SIGILL | 4 | A | Instruction illégale. SIGABRT | 6 | C | Signal d'arrêt depuis abort(3). SIGFPE | 8 | C | Erreur mathématique virgule flottante. SIGKILL | 9 | AEF | Signal 'KILL'. SIGSEGV | 11 | C | Référence mémoire invalide. SIGPIPE | 13 | A | Ecriture dans un tube sans lecteur. SIGALRM | 14 | A | Temporisation alarm(2) écoulée. SIGTERM | 15 | A | Signal de fin. SIGUSR1 | 30,10,16 | A | Signal utilisateur 1. SIGUSR2 | 31,12,17 | A | Signal utilisateur 2. SIGCHLD | 20,17,18 | B | Fils arrêté ou terminé. SIGCONT | 19,18,25 | | Continuer si arrêté. SIGSTOP | 17,19,23 | DEF | Arrêt du processus. SIGTSTP | 18,20,24 | D | Stop invoqué depuis tty. SIGTTIN | 21,21,26 | D | Lecture sur tty en arrière-plan. SIGTTOU | 22,22,27 | D | Ecriture sur tty en arrière-plan
avec les actions :
A Par défaut, terminer le processus.
B Par défaut, ignorer le signal.
C Par défaut, créer un fichier core et terminer le processus.
D Par défaut arrêter le processus.
E Le signal ne peut pas être intercepté.
F Le signal ne peut pas être ignoré.
Exercice sur les processus
Vérifier qu’un serveur ssh (sshd) tourne sur la machine.
Notez son PID et aussi le PID de votre bash.
Lancez un client ssh.
Vérifiez comment sont liés votre process Batch , le process ssh que vous avez lancé, le process ssh serveur et le process init.