Séance 4 : Processus§
Département Informatique (IUT Lyon 1)
Ce travail est sous licence Creative Commons Attribution-ShareAlike 3.0 France.
Département Informatique (IUT Lyon 1)
Ce travail est sous licence Creative Commons Attribution-ShareAlike 3.0 France.
On appelle processus l'exécution d'un programme.
Sous Linux, chaque processus est identifié par un numéro appelé PID (Processus IDentifier).
À chaque processus est également associé :
Affiche la liste des processus en cours (par défaut : uniquement ceux de l'utilisateur et du terminal courant).
-u
Affiche tous les processus de l'utilisateur (tous terminaux confondus).
-A
Affiche tous les processus du système.
-f
Donne plus d'information sur les processus affichés.
-H
Ordonne et indente les processus selon leur généalogie (PPID).
Affiche les processus consommant le plus de ressource CPU, en rafraichissant l'affichage régulièrement.
Pour quitter top
, tapez q
ou CTRL+C.
Arrête (« tue ») le(s) processus identifié(s) par pid
.
Note
On verra plus tard une utilisation plus générale de la commande kill
.
Affiche la liste des processus suspendus ou en tâche de fond pour le shell courant.
Chaque process est identifié par un numéro de job (différent de son PID).
-l
Affiche également le PID de chaque processus.
-p
Affiche uniquement le PID des processus.
Note
Les numéros de job sont propres au shell, alors que les PIDs sont valables pour tout le SE.
Relance au premier plan le job spécifié.
jobid
Le numéro de job du processus à relancer.
Par défaut : le processus exécuté le plus récemment.
Au lieu d'un PID,
la commande kill
accepte aussi comme argument un numéro de job,
précédé du caractère pourcent %
.
Avertissement
Lorsqu'une tâche de fond affiche du texte, ceci peut avoir des effets inattendus.
On ajoute à la fin de la ligne de commande le caractère esperluette (&
).
Exemple :
curl http://example.org/ubuntu-19-10.iso >ubuntu &
NB: le &
peut également être utilisé comme un séparateur
pour lancer plusieurs processus sur la même ligne de commande :
prog1 & prog2 & prog3
# lance prog1 et prog2 et tâche de fond, et prog3 au premier plan
Relance en tâche de fond un processus suspendu.
jobid
Le numéro de job du processus à relancer.
Par défaut : le processus exécuté le plus récemment.
Un signal est un message envoyé par le SE à un processus.
La plupart des signaux ont pour effet de tuer le processus, mais
- certains ont un autre effet (voir ci-après), et
- un programme peut personnaliser sa répose à certains signaux.
Envoie un signal à un ou plusieurs processus.
pid [...]
Le(s) PID(s) du/des processus à qui envoyer le signal.
-s
[signal]
Le signal à envoter (par défaut SIGTERM
).
bg
sert en fait à envoyer SIGCONT à un processus.fg
envoie également SIGCONT au processus, et fait en sorte d'attendre la fin.man
a personnalisé sa réponse à SIGINT
(le procecuss n'est pas tué lorsqu'on tape CTRL+C).On a déjà vu plusieurs moyens de lancer plusieurs processus depuis une seule ligne de commande :
# en parallèle
prog1 & prog2 & prog3
# en parallèle avec redirections via des tubes
prog1 | prog2 | prog3
On peut également lancer plusieurs processus l'un à la suite des autres,
en les séparant par un point-virgule (;
) :
# en séquence
prog1 ; prog2 ; prog3
Indication
Le point-virgule joue exactement le même rôle que le retour à la ligne.
int main(int argc, char* argv[]) {
/* ... */
}
main
est récupérée par le SE;
on l'appelle parfois code de statut (status code).echo $?
affiche le code de status de la dernière commande exécutée.« et alors » &&
:
la commande de droite est exécutée si et seulement si la commande de gauche a réussi
(status = 0) :
prog1 && prog2
« ou sinon » ||
:
la commande de droite est exécutée si et seulement si la commande de gauche a échoué
(status ≠ 0) :
prog1 || prog2
dans tous les cas, le code de statut de l'enchaînement est celui de la dernière commande exécutée.
Le connecteur pipe (|
) a priorité sur les connecteurs d'enchaînement.
On peut influer sur les priorités avec des parenthèses :
$ echo Z; echo A | sort
Z
A
$ (echo Z; echo A) | sort
A
Z