Exécution de programmes en arrière-plan depuis un terminal

121

Comment exécuter un programme en arrière-plan d'un shell, avec la possibilité de fermer le shell tout en laissant le programme en cours d'exécution? Disons que mon interface utilisateur a des problèmes ou pour une raison quelconque, je dois démarrer un programme à partir de la fenêtre du terminal, par exemple, nm-applet :

nm-applet

Au démarrage, il occupe le premier plan de la fenêtre du terminal.

Existe-t-il un moyen simple d’exécuter le programme en arrière-plan sans avoir à quitter le terminal ou à occuper l’ensemble du terminal?

Sur cette note, j’ai trouvé un moyen d’exécuter des programmes à partir du terminal et de le laisser autoriser d’autres entrées, en ajoutant une perluète ( & ) à la commande en tant que telle:

nm-applet &

Mais ce n’est pas très utile car tous les processus démarrés dans le terminal sont supprimés une fois le terminal fermé.

    
posée OVERTONE 22.02.2012 - 01:07
la source

8 réponses

155

Je me suis récemment mis à aimer setsid . On commence à croire que vous exécutez simplement quelque chose depuis le terminal, mais vous pouvez vous déconnecter (fermer le terminal) et ça continue. ”

Ceci est dû au fait que la commande est en train de s’exécuter et que l’entrée arrive au terminal actuel, elle appartient à un parent complètement différent (qui reste actif après la fermeture du terminal).

Un exemple:

setsid gnome-calculator

Je suis également assez partial pour disown qui peut être utilisé pour séparer un processus de l'arborescence actuelle. Vous l'utilisez en conjonction avec l'esperluette d'arrière-plan:

gnome-calculator & disown

Je viens aussi d'apprendre comment créer des sous-couches avec des parenthèses. Cette méthode simple fonctionne:

(gnome-calculator &)

Bien sûr, vous avez mentionné nohup . Je ne parle pas de nohup parce qu'il a tendance à écrire à ~/nohup.out sans que je le demande. Si vous comptez sur cela, cela pourrait être pour vous.

nohup gnome-calculator

Et pour les processus à plus long terme, il y a des choses comme screen et d'autres muxers de terminaux virtuels qui maintiennent les sessions actives entre les connexions. Celles-ci ne s'appliquent probablement pas vraiment à vous car vous voulez simplement accéder temporairement à la sortie du terminal, mais si vous voulez revenir en arrière plus tard et voir la dernière activité du terminal, l'écran sera probablement votre meilleur choix.

Internet regorge de tutoriels screen , mais voici un simple démarrage rapide:

réponse donnée Oli 22.02.2012 - 01:41
la source
46

Voici les deux façons de procéder. Tout d'abord, ne pas l'exécuter depuis un terminal; Cliquez sur Alt + F2 pour ouvrir le dialogue d'exécution et exécutez-le à partir de là (sans & amp;).

Depuis un terminal, lancez

nm-applet &

Mais ne fermez PAS le terminal vous-même. Autrement dit, ne cliquez pas sur le bouton X pour fermer et n'utilisez pas File - & gt; Sortez de sa barre de menus. Si vous fermez le terminal de cette façon, il enverra un signal HUP (Hang UP) au bash qui s'exécute, ce qui enverra le signal HUP à tous ses enfants (ce qui explique pourquoi NoHup fonctionne dans ce cas).

Au lieu de cela, quittez le shell en exécutant exit ou en appuyant sur Ctrl + D . bash désactive alors ses enfants, puis quitte, laissant les processus d'arrière-plan toujours en cours d'exécution. Et quand bash se termine, le terminal a perdu son processus enfant, donc il se ferme aussi.

Tout faire en même temps:

nm-applet & exit
    
réponse donnée geirha 23.02.2012 - 12:45
la source
13

Comme vous l’avez souligné, vous pouvez lancer

nohup nm-applet &  

pour ignorer le signal de fin lors de la fermeture du terminal. Pas de problème avec ça.

    
réponse donnée desgua 22.02.2012 - 01:17
la source
10

Une autre chose qui manque à de nombreuses autres réponses est la manière de détacher un processus en cours d'exécution qui bloque actuellement le shell. Dans la plupart des terminaux et des shells, Ctrl + Z arrêtera le processus en cours et vous ramènera à une invite de saisie. Ensuite, vous pouvez émettre

bg

pour envoyer le processus en cours en arrière-plan. Problème

fg

au lieu de remettre le processus en cours au premier plan.

MODIFIER : plus de détails dans cette réponse que j'ai découvert plus tard.

    
réponse donnée krlmlr 31.03.2015 - 16:37
la source
6

Utilisez (exec PROGRAM &> /dev/null & ) pour autoriser le remplacement de PID du sous-shell par PROGRAM . J'ai testé cette approche à plusieurs reprises avec plusieurs programmes différents. La fermeture du terminal d'origine n'a aucun effet sur le programme nouvellement créé

Petite démo:

$ # this is before running
$ (exec firefox &> /dev/null &)
$ # and look, we still in side the terminal and can continue working
    
réponse donnée Sergiy Kolodyazhnyy 30.11.2015 - 12:35
la source
2

Je peux recommander le terminal byobu. Vous pouvez facilement détacher votre processus en appuyant sur la touche F6.

    
réponse donnée speter 05.03.2013 - 01:07
la source
1

Bien qu'il y ait de bonnes réponses ci-dessus, je voudrais donner mes 2 centimes sur l'utilisation de MATLAB en arrière-plan.

sudo -b matlab

La balise -b de sudo peut exécuter des applications en arrière-plan. Vous pouvez également fermer le terminal après avoir exécuté cette commande.

Probablement sans rapport, mais il existe un site Web formidable que vous pouvez utiliser pour expliquer les commandes du shell. lien

    
réponse donnée user3342981 28.06.2016 - 16:39
la source
0

Je ne sais pas comment faire, mais je commence juste une autre session en laissant le précédent allone. Par exemple, j'ai exécuté un simple serveur Web sur mon framboise. le web.py puis je commence une nouvelle session en la laissant seule. c'est tout. Il est également utile car vous êtes toujours à jour même si vous travaillez sur l'autre session.

    
réponse donnée leo 06.07.2016 - 00:15
la source

Lire d'autres questions sur les étiquettes