Il est assez intéressant de savoir passer un processus en background si ce dernier dure longtemps, afin d’avoir la main pour lancer autre chose (sans ouvrir une autre fenêtre shell).
Contenu
Mettre un process en background dès le lancement
Imaginez que vous ayez lancé une commande « find »
find ./ -type f "fichier"
Cette commander peut durer plusieurs secondes ou minutes sur un serveur lent. On va le lancer directement en tâche de fond.
find ./ -type f "fichier" &
Mettre un process déjà engagé en background
Vous avez lancé une commande mais oublié de le mettre dès le lancement en background, ou alors elle dure plus longtemps que prévu, pas de panique, vous pouvez toujours le mettre en bacground.
find ./ -type f "fichier" [CTRL+Z] bg
En faisant Control+Z, vous reprenez la main sur le shell et vous pouvez taper « bg » pour mettre le process background.
Remettre un process en foreground
Finalement vous décidez de remettre en avant le process qui a été mis en background, c’est possible tout simplement avec la commande « fg »
fg
Oui mais ça marche pour le dernier process lancé, comment faire si vous avez lancé plusieurs process? Grâce à la commande « jobs », vous pouvez lister les commandes qui sont en background.
jobs [1] Stopped vim [2]- Stopped bash [3]+ Stopped vim 23 fg %3 pour ramener vim 23 en avant plan.
Mettre un process en background et le détacher du shell
Ok, tout ce qu’on a vu jusqu’à présent, et relié au shell courant, c’est à dire que si vous fermez la fenêtre du shell, la commande en background va s’arrêter.
Afin de rendre le processus indépendant du shell, il faut le détacher du shell. Ceci se fait grâce à al commande nohup.
nohup find ./ -type f "fichier"
Cette commande va aussi générer un fichier log nohup.out dans le répertoire home.
Détacher un process existant du shell
Avec « nohup » vous détachez d’emblée un process du shell, mais il est possible de détacher après coup.
find ./ -type f "fichier" & disown
grâce à la commande « disown », on détache après coup un process du shell. Faire le contraire de « disown » n’est pas implémenté dans Linux et ne sera pas traité. Si vous voulez arrêter un job, il faudra utiliser la commande « kill ».
Utilisé de concert avec la commande « jobs », utilisez le paramètre -h pour indiquer quel job détacher du shell.
disown -h %3