Dans ce guide, nous mettrons en lumière un concept simple mais important dans la gestion des processus dans un système Linux, à savoir comment détacher complètement un processus de son terminal de contrôle.
Lorsqu’un processus Linux est associé à un terminal, deux problèmes peuvent survenir :
- Votre terminal de contrôle est rempli de tant de données de sortie et de messages d’erreur/diagnostic.
- Dans le cas où le terminal est fermé, le processus ainsi que ses processus enfants seront terminés.
Pour faire face à ces deux problèmes, vous devez totalement détacher un processus d’un terminal de contrôle. Avant de passer à la résolution du problème, expliquons brièvement comment exécuter des processus en arrière-plan sous Linux.
Exécuter une commande ou un processus Linux en arrière-plan
Si un processus est déjà en cours d’exécution, comme l’exemple de commande tar ci-dessous, appuyez simplement sur Ctrl+Z
pour l’arrêter, entrez la commande bg
pour poursuivre son exécution en arrière-plan en tant que travail.
Vous pouvez afficher toutes vos tâches d’arrière-plan en tapant jobs
. Cependant, son standard, sortie standardet stderr sont toujours joints au terminal.
$ tar -czf home.tar.gz . $ bg $ jobs
Vous pouvez également exécuter un processus directement depuis l’arrière-plan en utilisant l’esperluette, &
signe.
$ tar -czf home.tar.gz . & $ jobs
Jetez un œil à l’exemple ci-dessous, bien que la commande tar ait été lancée en arrière-plan, un message d’erreur a toujours été envoyé au terminal, ce qui signifie que le processus est toujours connecté au terminal de contrôle.
$ tar -czf home.tar.gz . & $ jobs tar: ./.config/etcher: Cannot open: Permission denied
Maintenir les processus Linux en cours d’exécution après la fermeture du terminal
Nous utiliserons le renier commande, qui est utilisée après que le processus a été exécuté et mis en arrière-plan, son travail consiste à supprimer un travail de shell des travaux de la liste active du shell, donc vous n’utiliserez pas fg
, bg
commandes sur ce travail particulier plus.
De plus, lorsque vous fermez le terminal de contrôle, le travail ne se bloque pas ou n’envoie pas de SIGHUP à tous les emplois d’enfants.
Jetons un coup d’œil à l’exemple ci-dessous d’utilisation de refusé fonction intégrée bash.
$ sudo rsync Templates/* /var/www/html/files/ & $ jobs $ disown -h %1 $ jobs
Vous pouvez également utiliser le nohup
qui permet également à un processus de continuer à s’exécuter en arrière-plan lorsqu’un utilisateur quitte un shell.
$ nohup tar -czf iso.tar.gz Templates/* & $ jobs
Détacher les processus Linux dans le terminal
Par conséquent, pour détacher complètement un processus d’un terminal de contrôle, utilisez le format de commande ci-dessous, c’est plus efficace pour l’interface utilisateur graphique (interface graphique) des applications telles que Firefox :
$ firefox </dev/null &>/dev/null &
Sous Linux, /dev/null est un fichier de périphérique spécial qui efface (se débarrasse) de toutes les données écrites dessus, dans la commande ci-dessus, l’entrée est lue et la sortie est envoyée à /dev/null.
En guise de conclusion, à condition qu’un processus soit connecté à un terminal de contrôle, en tant qu’utilisateur, vous verrez plusieurs lignes de sortie des données de processus ainsi que des messages d’erreur sur votre terminal. Encore une fois, lorsque vous fermez le terminal de contrôle, votre processus et vos processus enfants seront terminés.
Surtout, pour toute question ou remarque sur le sujet, contactez-nous en utilisant le formulaire de commentaire ci-dessous.
Si vous appréciez ce que nous faisons ici sur TecMint, vous devriez considérer :
TecMint est le site communautaire à la croissance la plus rapide et le plus fiable pour tout type d’articles, de guides et de livres Linux sur le Web. Des millions de personnes visitent TecMint ! pour rechercher ou parcourir les milliers d’articles publiés accessibles GRATUITEMENT à tous.
Si vous aimez ce que vous lisez, pensez à nous acheter un café (ou 2) en signe d’appréciation.
Nous sommes reconnaissants pour votre soutien sans fin.