Bash: gérer les process

commandes de bases (ps, kill, bg et fg + CTRL+Z)

ps

snapshot de tous les processus qui tournent sur machine
(now => voir top pour mettre à  jour régulièrement).

donne PID, terminal (ttyp2 = pseudoterminal du xterm), temps-cpu utilisé depuis le lancement de la commande et nom de commande associée

Accepte plusieurs types d'options (unix avec -, bsd sans - ou gnu qui a 2 dash --). On peux les mixter, mais on peux avoir des conflits (par ex ps -aux diffère de ps aux car si user x n'existe pas, il peux faire aux)
Voir standards SUS

jobs ses processus
kill envoi un signal au process
kill -l montre les signaux supportés: on va voir 1 (up: écouté par appli pour action), 2 (interruption CTRL+C), 15 (terminal, par défaut) et 9 (kill envoyé par le kernel, pas écouté par appli)
bg et fg bg met le process en arrière plan (background &) alors que fg le met en avant (forground)
top
 
aff process/threads linux en temps réel.
mode interactif (ou cli): utiliser h ou ?   et q pour quitter

 

On va utiliser xload (charge système)

Tapper xload pour voir la charge système (intégré à X, l'interface graphique): le prompt n'est pas revenu car shell attent la fin du programme. Avec xload & le prompt reste dispo car xload est en arrière plan. Si on oublie le &: faire CTRL+Z pour suspendre le process, puis bg.

Bref, on a besoin d'avoir au moins un xload qui tourne en fond avant de faire ps pour noter l'ID du process (et faire un kill). Relancer 2 xload en bg, puis faire jobs et kill &1  suivi d'un ps

kill pour tuer un process planté

faire un ps x | grep bad_program  pour noter l'ID, kill -SIGTERM id   (idem que kill id)  puis kill -SIGKILL id  (idem que kill -9 id)

Les processus en détails

Le noyau gère l’ensemble des processus grâce à un programme appelé l’ordonnanceur (scheduler). Ce dernier a pour but d’accorder aux processus du temps-cpu, et ceci chacun à tour de rôle, en fonction de priorités. Un processus peut se trouver dans quatre états :

  • actif : le processus utilise le cpu
  • prêt : le processus attend que l’ordonnanceur lui fasse signe ; Runnable
  • endormi : le processus attend un évènement particulier (il ne consomme pas de cpu dans cet état) ; Sleepling
  • suspendu : le processus a été interrompu par un signal.

Chaque processus (à l’exception du tout premier créé) possède un processus père, cela constitue une arborescence.

A la notion de processus, on associe généralement la notion de terminal. Un terminal est un canal de communication entre un processus et l’utilisateur.
Il peut correspondre à un terminal physique (écran ou clavier), mais aussi à un émulateur de terminal (comme une fenêtre XTerm). Dans les deux cas un fichier spécial dans le répertoire /dev est associé au terminal (ex: /dev/tty1 est la 1ere console en mode texte ds linux) et les communications se font par le biais d’appels système sur ce fichier.
La variable TERM informe les applications sur le comportement du terminal (entre autres choses, la manière dont les caractères de contrôle seront interprétés).

L'option x de la commande ps permet de lister les processus de l’utilisateur qui ne sont par rattachés au terminal courant. La col STAT indique l'état.
ps -u username parle de lui-meme ;)
ps aux | head    Chercher init, START montre qd a été booté
ps -ef               montre ID du père (PPID), STIME =start préc

L'option o pour limiter: ps -xo pid,cmd  n'affiche que pid et commande, combinée avec x

L’option --forest: ps --forest -eo pid,ppid,cmd  chercher "lightdm". ps --forest -eo pid,ppid,cmd | grep lightdm
 

Modifier le déroulement d’un processus

Au moins 3 facons: nice, kill ou utiliser le contrôle de tâche (job control) depuis le shell (permet de modifier le déroulement des programmes s’exécutant dans un terminal donné).

priorité

Par défaut un processus lancé par un utilisateur a la même priorité que celui d’un autre utilisateur. Dans la situation où l’on désire lancer un processus gourmand sans gêner les autres utilisateurs du système, on peut utiliser la commande nice
nice -n priorité./groscalcul   où −20 ≤ priorité ≤ 19, 19 désignant la plus petite priorité (processus « laissant sa place » aux autres) et −20 la plus grande.
Par défaut, les utilisateurs n’ont pas le droit d’utiliser une priorité négative, par conséquent tous les utilisateurs sont égaux.

renice permettant de baisser la priorité d’un processus une fois qu’il est lancé.
ex:  renice -10 -p 4358   donne la priorité 10 au pid 4358

contrôle de tâches ou job control: bg et fg

Permet de manipuler les processus tournant sur un terminal donné. Sur chaque terminal, on distingue deux types de processus :
1. en avant-plan, celui qui peut utiliser le terminal comme canal de communication avec l’utilisateur par le biais du clavier ; on dit également
qu’on « a la main » sur ce type de processus ;
2. en arrière-plan (ou tâche de fond) ; ceux-là peuvent utiliser le terminal comme canal de sortie (pour afficher des informations par ex) mais ne peuvent lire les données que leur fournirait l’utilisateur.

selon qu’une application intercepte ou ignore les deux signaux particuliers TTOU et TTIN (respectivement écriture ou lecture d’un processus en arrière-plan), le comportement pourra être différent.

lister les taches

jobs permet d’obtenir une liste des tâches en arrière-plan, ou interrompues, sur le terminal. Faire xclock & xlogo & xbiff & puis jobs
%numéro_de_tâche pour bg, kill bg et fg. fg %2 on n'a plus la main sur xlogo

 

Voir mes notes sur les commandes processus