Outils pour utilisateurs

Outils du site


sysadmin:linux:gestion-processus

Ceci est une ancienne révision du document !


Gestion des processus

Afficher les processus

Pour afficher les processus (programmes en cours d'execution) utiliser les commandes ps ou pstree:

yoann@janus:~$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0   2784  1712 ?        Ss   Apr03   0:00 /sbin/init
root         2  0.0  0.0      0     0 ?        S    Apr03   0:00 [kthreadd]
...
yoann@janus:~$

L'argument -p de pstree permet d'afficher les PIDs:

yoann@janus:~$ pstree -p
...
  └─yakuake(2217)─┬─bash(3309)───ssh(4258)
                        ├─bash(4261)───tail(4489)
                        ├─bash(4337)─┬─pstree(4626)
                        │            └─tsclient(4354)───vncviewer(4355)
                        └─{yakuake}(2242)
yoann@janus:~$

La commande pgrep permet de récupérer facilement le PID d'un processus dont on connait partiellement le nom. L'option -l permet de retourner également le nom du processus. Par défaut seul le PID est retourné:

yoann@janus:~$ pgrep -l fire
1175 firegl
2332 firefox

Les jobs

Les jobs sont les processus exécutés par le shell courant. Pour les afficher invoquer jobs:

yoann@janus:~$ jobs
[1]-  Running                 sleep 40m &
[2]+  Running                 tail -f /var/log/messages &
yoann@janus:~$

Dans cet exemples deux jobs s'exécutent en arrière plan. Chaque job est identifié par un numéro. Il est possible de récupérer l'exécution du job en avant plan avec la commande fg

yoann@janus:~$ fg %2
tail -f /var/log/messages

Lorsque l'application est au premier plan, elle peut être mise en pause avec ctrl+Z. Une fois le processus fils en pause, la main est rendue au shell. Le processus apparait dans la liste des jobs existant dans l'état stoppé.

yoann@janus:~$ jobs
[2]+  Stopped                 tail -f /var/log/messages
yoann@janus:~$

Pour reprendre l'exécution du processus en arrière plan, utiliser la commande bg

yoann@janus:~$ bg %2
[2]+ tail -f /var/log/messages &
yoann@janus:~$ jobs
[2]+  Running                 tail -f /var/log/messages &
yoann@janus:~$

Contrôle des processus

Les commandes bg et fg n'autorisent le contrôle que des processus fils du shell courant (jobs). Pour contrôler l'exécution des processus ne dépendant pas du shell, on disposera des commandes kill, killall, pkill et skill.

Arrêter un processus

La commande kill avec le signal -9 permet de forcer l'arrêt d'un processus identifié par son PID. killall a le même effet mais le processus est désigné par le nom de son exécutable. pkill agit de la meme maniere mais fonctionne même avec un nom partiel (utilise les expression régulières)

$ pkill firefox
$ pkill -9 tomboy
$ pkill -KILL thunderbird
$ sudo killall apache2

Les signaux

Les signaux sont envoyés par le système ou les commandes skill et kill* pour contrôler les processus:

Signal numéro description
STOP 19 Mettre un processus en pause
CONT 18 Repasser un processus en execution
KILL 9 Arrêt forcé du processus.

Dans l'exemple ci-dessous, la première commande affiche le PID du shell courant. La commande pstree permet d'afficher l'arborescence des processus. On choisit ici de contrôler l'exécution du processus 4489 ne dépendant pas du shell courant.

yoann@janus:~$ echo $$
4337
yoann@janus:~$ pstree -p
...
       └─yakuake(2217)─┬─bash(3309)───ssh(4258)
                        ├─bash(4261)───tail(4489)
                        ├─bash(4337)─┬─pstree(4666)
                        │            └─tsclient(4354)───vncviewer(4355)
                        └─{yakuake}(2242)

Les commandes ps et grep permettent d'afficher l'état du processus 4489. Ici on peut voir qu'il est en cours d'exécution, dans l'état sommeil (Sleep).

yoann@janus:~$ ps aux | grep 4489
yoann     4489  0.0  0.0   3256   648 pts/2    S    08:25   0:00 tail -f /var/log/messages

On envoie les signaux -STOP et -CONT et on vérifie l'état du processus:

yoann@janus:~$ kill -STOP 4489
yoann@janus:~$ ps aux | grep 4489
yoann     4489  0.0  0.0   3256   648 pts/2    T    08:25   0:00 tail -f /var/log/messages
yoann@janus:~$ kill -CONT 4489
yoann@janus:~$ ps aux | grep 4489
yoann     4489  0.0  0.0   3256   648 pts/2    S    08:25   0:00 tail -f /var/log/messages
yoann     4746  0.0  0.0   3336   812 pts/3    R+   10:46   0:00 grep --color=auto 4489
yoann@janus:~$

Le processus 4489 est bien arrêté après reception du signal STOP (état T affiché par ps) puis revient bien en état execution en sommeil apres reception du signal CONT (état S affiché par ps).

Continuer l'exécution d'un processus après déconnexion

La commande nohup permet de continuer l'exécution d'un processus même après déconnexion de l'utilisateur courant.

Références

sysadmin/linux/gestion-processus.1546865847.txt.gz · Dernière modification : 2021/02/01 21:51 (modification externe)