Comment puis-je exécuter une commande depuis le terminal sans la bloquer?

45

J'exécute beaucoup de programmes dans Ubuntu à partir du terminal, mais j'aimerais pouvoir continuer à utiliser le terminal après l'ouverture d'un programme. Comment puis-je mettre les programmes en arrière-plan afin de ne pas ouvrir une autre fenêtre?

Salvador Dali
la source

Réponses:

60

Il existe différentes manières d'exécuter un programme de terminal et de continuer à utiliser le terminal:

  • Vous pouvez ouvrir un autre onglet de terminal (clic droit, puis sélectionnez "Ouvrir un nouvel onglet").
  • Vous pouvez ajouter &à la commande que vous exécutez. Sachez que vous ne verrez pas de texte sortir sur le terminal, tel que des messages d'erreur.
  • Vous pouvez taper Ctrl- Zpuis exécuter bg. Cela a le même effet que de courircommand &
  • Vous pouvez exécuter nohup command &, puis appuyez sur Entrée. (Merci à ccpizza , voir les commentaires ci-dessous.)

Cependant, appuyer sur Alt- F2puis exécuter votre commande à partir de l'interface graphique est généralement considéré comme la meilleure pratique - il n'y a pas de terminal du tout!

Notez que lorsque vous utilisez &(non nohup), la fermeture du terminal mettra toujours fin à l'application, sauf si vous l'exécutez disownpar la suite .

EDIT: Il semble que l’utilisation nohuplaisse parfois de petites excréments dans votre dossier personnel. Ce qui aurait normalement été connecté au terminal est apparemment sauvegardé dans un fichier dans ~ /.

~~

Un moyen simple d’exécuter un programme en arrière-plan consiste program-name & disownà vous faire basculer vers un terminal qui peut être fermé sans tuer le processus.

WindowsEscapist
la source
4
Pour éviter de tuer le processus enfant après la fermeture du terminal, vous pouvez démarrer votre application en tant que nohup firefox&.
ccpizza
Cool! Je ne le savais pas (mais après expérimentation, le terminal est toujours "bloqué")!
WindowsEscapist
il n'est pas "bloqué", il semble seulement "bloqué", si vous tapez entrée une fois, vous obtiendrez une invite.
ccpizza
Ah, je n'avais pas remarqué ça avant.
WindowsEscapist
program-name & disownest une bonne solution
Docteur Henry
8

Vous pouvez exécuter la commande avec a & after.

Par exemple:

Thunderbird &

Voir ici pour plus d'informations.

Viertaxa
la source
Cela ne fonctionne que jusqu'à ce que vous
fermiez
6

Vous pouvez utiliser setsidpour exécuter le programme dans une nouvelle session avec en plus pour &>/dev/nullne recevoir aucun message de journal.

Donc, ce serait comme

setsid program-name &>/dev/null

Rumid
la source
Cool. Il doit garder le processus en cours lorsque l'utilisateur se déconnecte et que la session en cours est fermée.
Mikhail Moskalev
1

À l’aide de la screencommande, vous pouvez ouvrir plusieurs sessions de terminal à l’aide d’une seule fenêtre et appuyer sur

apt-get install screen (On Debian based Systems)

yum install screen (On RedHat based Systems)

screen (démarrer nouvel écran)

[Your command]

Ctrl+A d quitter l'écran ... et ainsi de suite

https://linuxize.com/post/how-to-use-linux-screen/

Ahmed Ismail
la source
0

Vous pouvez l'exécuter dans un terminal virtuel comme tmux(ou screenj'ai entendu dire que ce n'est plus maintenu)

# This ataches your terminal to a virtual terminal
tmux
run_your_command
# This detaches your virtual terminal (previous command can be running)
CTRL-b d
run_other_commands # on your terminal
# re-attach the virtual terminal to see the status of run_your_command
tmux a

tmux peut faire beaucoup plus, comme:

  • déplacez votre terminal virtuel vers un autre terminal
  • partager le terminal virtuel dans plusieurs terminaux (les autres utilisateurs peuvent voir ce que vous faites ;-))
  • diviser "l'écran" pour avoir plusieurs terminaux.
  • ...

https://www.hamvocke.com/blog/a-quick-and-easy-guide-to-tmux/

Sébastien DA ROCHA
la source