Process
Un process correspond à l'exécution d'un fichier. Les process sont organisés en arbre et descendent tous du premier process crée : systemd
. Créer un process se fait en plusieurs temps :
- le process appelant est dupliqué en utilisant l'appel système fork (ie le shell qui lance la commande). Le process appelant est le process parent, le nouveau process le process enfant. Le fait que le process est dupliqué fait que :
- l'environnement des process parent et enfant est le même
- le propriétaire (uip) et le groupe (pid) des process parent et enfant sont les mêmes
- on associe un numéro, le PID, à ce nouveau process. Ce numéro est unique
- le PID du parent est associé à l'enfant via le PPID
Un process d'uid root peut changer son utilisateur et son groupe. Ceci se fait :
- au login d'un utilisateur : le premier shell de l'utilisateur possède son uid
- pour les serveurs : le groupe est positionné au groupe de l'application. Par exemple web pour un serveur web.
Enfin, certains process peuvent avoir les privilèges de root
alors qu'ils sont exécutés par de simples utilisateur. Ces process sont lancés par des fichiers possédant le flag setuid ou setgid. Par exemple la commande passwd
qui doit pouvoir être exécutée par un utilisateur mais modifier le ficheor /etc/shadow
qui est la propriété de root
.
Arbre des process
pstree
top
ps aux
/proc/pid
Process foreground/background
TBD : process management
Tout shell possède :
-
au plus un process foreground qui possède l'entrée standard (par exemple top lorsqu'il est lancé)
-
plusieurs process background qui possèdent la sortie et l'erreur standard
-
suspendre une commande avec ctrl+Z qui envoie le signal
SIGSTOP
-
exécuter une commande avec
&
Vie et mort d'un process
-
lorsque le parent meurt il envoie un signal de fin à ses enfants.
-
nohup
pour rattacher un process à systemd et ainsi il ne sera supprimé que si la machine reboot -
screen ou tmux pour faire la même chose mais en mieux : ce sont des shell qui sont attaché à tmux qui est attaché à systemd. On peut y retourner si besoin
-
kill PID
-
kill -9 PID
créer des process par clone d'un process (on choisit ce qu'on partage avec le père), ex une commande shell : comment ça marche le clone/fork
TBD tuer une xterm dans une xterm. Même avec un & tmux ou screen pour sauver un shell. Mieux que hohup
/usr/bin/screen -d -m -S node node exemple.js