Je suis un développeur de logiciels avec un grand intérêt pour l’analyse de données et les statistiques.
Si vous êtes comme moi et que vous avez commencé à détester cliquer sur des icônes pour lancer des projets, vous les démarrez depuis le shell. Par exemple, j’ouvre mon terminal ou j’ai un terminal ouvert et j’exécute la commande VLC. Cette commande ouvrira le lecteur multimédia VLC si vous l’avez installé. Mais maintenant, le processus s’exécute au premier plan sur votre terminal ouvert. Le cycle de vie de VLC est étroitement lié au terminal et bloque d’autres actions sur le terminal. Si vous n’avez pas VLC, utilisez le ‘gnome-calculator’ par exemple.
Lorsque vous démarrez le processus de cette façon, vous verrez que le shell attend (bloque) jusqu’à ce que le programme se termine ou se termine.
Si vous fermez le terminal, le terminal vous demandera : « Il y a encore un processus en cours d’exécution dans ce terminal. Fermer le terminal le tuera ». Vous pouvez annuler ou fermer le terminal. En effet, le processus que vous avez lancé hérite de certaines choses du shell (stdin, stdout, etc.). Cela rend le processus lié à ce terminal.
Lorsque vous fermez votre terminal, le shell reçoit un SIGHUP. Il envoie également un SIGHUP au processus que vous avez démarré. Cela mettra fin au processus.
Supposons que vous ne vouliez pas tuer le processus, mais que vous n’ayez plus besoin de ce terminal ou que vous ne le vouliez plus. Ou vous pouvez continuer à utiliser le terminal pour d’autres tâches.
Ajouter le ‘&’ à votre commande
Dans le cas de VLC, le processus passe en arrière-plan et vous pouvez continuer à utiliser le terminal comme bon vous semble. Vous obtiendrez à nouveau une invite du shell. Souvent, je continue à partir de là ou efface le terminal et l’utilise pour d’autres tâches ou démarre différents processus.
Si vous fermez le terminal en appuyant sur le bouton de fermeture (x) avec la souris ou en utilisant Maj + Ctrl + W, il arrêtera tous les processus que vous avez démarrés dans ce terminal. C’est plus ou moins le même problème qu’avant, mais cette fois le terminal ne vous demande pas de le faire, il tue juste le(s) programme(s) immédiatement.
Si vous tapez la commande exit dans le terminal ou fermez avec le raccourci Ctrl+D, cela fermera le terminal, mais les processus en cours resteront actifs. C’est la première solution que j’ai essayé. Je l’utilise encore assez souvent, mais il y en a d’autres. Certains ont d’autres avantages ou vous offrent plus d’options si nécessaire.
$ vlc &
Ajouter le ‘& disown’ à votre commande
À bien des égards, cela (& renier) semble faire la même chose que d’ajouter le « & » à la commande. Mais lorsque vous ajoutez disown, le processus sera supprimé de la liste des tâches du shell. Le processus est toujours connecté au terminal, mais il ne reçoit pas le SIGHUP.
L’un des inconvénients du reniement est qu’il est spécifique à bash. Si vous utilisez souvent différents systèmes qui ne connaissent pas cette commande, cela peut être pénible. Étant donné que la plupart des commandes ressemblent à des réflexes après un certain temps, vous pourriez finir par taper cette commande sur des systèmes où elle ne sert à rien. Mais pour moi, ce n’est pas vraiment un problème, mais gardez-le à l’esprit.
Faites défiler pour continuer
$ vlc & disown
Utilisation de ‘setsid’ dans votre commande Shell
Une commande exécutée avec setsid ouvre et/ou attribue un nouvel identifiant de session au processus. Cet identifiant de session est différent de l’identifiant de session du terminal en cours d’exécution. Une arborescence de tous les processus (instances d’exécution des programmes) s’exécutant sur votre système montrerait que le processus avec un nouvel identifiant de session démarre à la racine de l’arborescence, et non comme une branche du processus terminal.
Avec setsid, vous ne pouvez pas vérifier la sortie du processus que vous avez démarré plus tard. C’est quelque chose que vous pouvez faire avec quelque chose comme nohup et screen. Avec screen, une session screen est attachée au processus et avec nohup, vous pouvez vérifier le fichier de sortie. Mais est-ce quelque chose dont vous avez besoin ou que vous voulez pour le processus que vous démarrez ? Parfois c’est le cas, mais souvent il vous suffit d’exécuter le programme et c’est tout.
Vous pouvez également le faire écrire dans un fichier de sortie lors de l’utilisation de setsid.
$ setsid vlc
Utiliser ‘nohup’ avec votre commande
Nohup séparera le processus du terminal. En raison de la déconnexion, il ne recevra pas SIGHUP, c’est pourquoi il s’appelle nohup. Si vous fermez le terminal, le processus se poursuivra jusqu’à ce que vous le fermiez.
Lorsque le terminal est ouvert, le travail est toujours au premier plan et toujours sous le contrôle du travail du shell. Cela signifie que si vous utilisez simplement nohup, vous ne pouvez toujours pas utiliser ce terminal pour d’autres tâches. Vous devez donc le combiner avec un ‘&’.
$ nohup vlc
$ nohup vlc &
Comme vous le voyez, il ferme/ignore l’entrée et ajoutera la sortie à un nohup.out. L’utilisation de nohup.out garantira que le processus peut toujours écrire sa sortie même lorsque le terminal se termine/se ferme.
Commandes de base Linux, ubuntu
La boîte de dialogue Exécuter
Vous pouvez également choisir de ne pas démarrer le processus à partir d’un terminal. Il est possible d’utiliser l’invite de la boîte de dialogue d’exécution. Appuyez sur ALT + F2 et tapez le processus que vous souhaitez démarrer dans l’écran de dialogue. Pour démarrer le lecteur multimédia VLC dans notre exemple de cas : vlc.
Cet article est exact et fidèle au meilleur de la connaissance de l’auteur. Le contenu est uniquement à des fins d’information ou de divertissement et ne remplace pas un conseil personnel ou un conseil professionnel en matière commerciale, financière, juridique ou technique.
© 2016 Sam Shepards
Antoine le 14 septembre 2020 :
Merci pour ce message.