Je ne peux pas utiliser le terminal lorsque la commande gedit est en cours d'exécution

44

J'ai récemment installé 12.04.
Lorsque j'essaie d'éditer un fichier avec gedit , je ne peux pas utiliser le terminal avant de fermer le fichier d'édition ou d'ouvrir un nouveau terminal. Mais je pense que je n’ai pas eu ce problème avec 11.04, mais je ne suis pas sûr.
Est-il possible d'éviter cela et d'utiliser le même terminal lors de l'édition de fichiers?

Hossein Hosseinvand
la source

Réponses:

81

Réponse courte

Dans le terminal qui ne répond pas:

  1. Hit Ctrl+ Z.
  2. Tapez bget entrez.
  3. Tapez disownet entrez.

Longue réponse

Dans le terminal qui ne répond pas, appuyez sur Ctrl+ Z, cela "mettra en pause" le processus (ou le "travail") et vous renverra le contrôle de la console. Cependant, vous remarquerez que cela geditne répond plus et que vous ne pouvez pas l'utiliser.

Extra : si vous voulez, vous pouvez exécuter la commande jobs, vous remarquerez qu'elle se lira Stopped pour la geditcommande, c'est pourquoi vous ne pouvez pas l'utiliser.

Pour que le travail s'exécute correctement en arrière-plan (c'est-à-dire qu'il soit geditréactif), exécutez la commande bg(ce qui signifie arrière-plan). Vous pourrez maintenant utiliser tout en geditayant l'invite pour vous-même.

Extra : maintenant, si vous exécutez jobs, vous remarquerez que ça va lire Running .

Vous pouvez surmonter tout cela dès le début. Lorsque vous lancez geditdepuis le terminal, ajoutez un &à la fin de la commande, donc quelque chose comme ça gedit /path/to/file &. Cela se lancera gediten arrière-plan depuis le début (vous devrez peut-être appuyer Enterplusieurs fois pour récupérer le contrôle de la console).

Extra : si vous suiviez ces notes supplémentaires, vous auriez peut-être remarqué que la deuxième fois jobs, vous pouviez voir que bash ajoutait un a &à la fin de la geditcommande.

Une fois que vous vous serez habitué à ce système, vous remarquerez peut-être que si vous fermez le terminal, gedit se terminera également, sans même qu'un dialogue de confirmation. Pour éviter que cela ne se produise, exécutez disown, qui détachera le processus gedit du terminal, en le supprimant de la liste renvoyée par jobs.

Alaa Ali
la source
2
Je suis toujours surpris qu'il n'y ait aucun moyen de mettre immédiatement en arrière-plan un processus en cours d'exécution au premier plan. Vous devez d'abord faire une pause, ce qui n'est parfois pas viable.
Détly
@detly, lisez à nouveau la partie "Vous pouvez vaincre ..."!
Guntbert
@guntbert - Ne pas d' aide si le processus est déjà en marche ...
detly
45

Il suffit de taper:

gedit <filename-to-edit> &

Cela vous renverra immédiatement l'invite de commande.

david6
la source
5
C’est un langage unix important qui mérite d’être connu. Toute commande peut être exécutée en arrière-plan de cette façon. Les outils interactifs seront évidemment déroutés par ce traitement, mais, par exemple, bubblesort war_and_peace.txt% permettra à votre trieur de s’attaquer au chef-d’œuvre (pendant très longtemps) tout en poursuivant votre travail (par exemple, en appliquant quicksort ou quelque chose)
Jon Kiparsky
1
@ JonKiparsky exemple amusant - fait le point.
Joe
25

Vous pouvez utiliser le nohuppour éviter que l'interface graphique soit connectée à un terminal:

nohup mupdf some.pdf &

Cela vous permettra de fermer le terminal à partir duquel vous lancez, sans que le programme ne soit fermé.

Vous devriez également remarquer que la commande nohup créera un fichier avec le stdoutet stderrde la commande que vous exécutez. Si vous voulez empêcher cela, ajoutez &>/dev/nullavant le &.

nohup mupdf some.pdf &>/dev/null &
Braiam
la source
4
"nohup" signifie "ne pas raccrocher". Cela remonte au début d'Unix, lorsque des terminaux (physiques) étaient régulièrement connectés via des lignes téléphoniques et que vous fermiez donc un terminal en raccrochant le téléphone.
MSalters
3
Informations complémentaires: La commande nohup créera un fichier nohup.outcontenant les résultats de la commande. Ceci est utile si vous souhaitez afficher les messages d'erreur. Si vous ne voulez pas que le fichier soit créé, ajoutez la redirection comme suit:nohup mupdf some.pdf &>/dev/null &
Paddy Landau
19

Vous pouvez également utiliser la disowncommande. Cela s'avère particulièrement utile lorsque vous avez déjà lancé le processus que vous ne souhaitez plus connecter au terminal.

La procédure de base, si je me souviens bien, ressemble à ceci:

$ > firefox      #Oops
Ctrl + z         #Suspend the process
$ > bg           #Push the process to the background
$ > disown       #Detach most recent process started or stopped
$ > exit         #Terminal gone!

Notez que désavouer est bashspécifique.

Ce billet de blog explique assez bien les deux méthodes.

Page de manuel pour disown

jmathew
la source
Un raccourci:firefox & disown
Flimm
13

De man gedit:

-b, --background
         Run gedit in the background.

Donc, si vous exécutez geditavec l' -boption, il va commencer en arrière - plan:

gedit -b [FILE-NAME]

De plus, vous pouvez ensuite créer un alias pour gedit -b(voir ici comment créer un alias permanent):

alias gedit='gedit -b'

A partir de maintenant, à l'avenir, vous pourrez utiliser gedit [FILE-NAME]normalement et tout commencera en arrière-plan.

Radu Rădeanu
la source
2
C'est une mauvaise idée d'utiliser un alias pour redéfinir les commandes courantes. Vous trouverez beaucoup de discussions à ce sujet sur stackexchange. Il est bon d'utiliser un alias avec un nom différent. En résumé, la création d'alias de commandes existantes crée un comportement inattendu sur votre machine si quelqu'un d'autre l'utilise (comme lorsque vous essayez de résoudre un autre problème) et cela vous fait la même chose lorsque vous utilisez un autre système sans ces alias et vos commandes ne fonctionne pas comme prévu. L'un des enfants de l'affiche est alias rm = 'rm -i'. Cela vous habitue à supprimer des éléments avec une seconde chance qui n’est pas toujours présente.
Joe
10

Il suffit de taper:

gedit FILENAME & disown

La fin d'une commande avec &in bash l'exécute en arrière-plan. Cependant, ce processus est toujours attaché au terminal.

Sans cela disown, si vous fermez le terminal, gedit se fermera sans même vous demander de sauvegarder un fichier modifié. disowndétache le processus d'arrière-plan du terminal actuel, de sorte que si vous fermez le terminal, gedit continuera à fonctionner normalement. Il s'avère que je me suis trompé, ce n'est pas le cas pour bash, mais c'est le cas pour zsh. Vous devez toujours courir detachaprès avoir fait ctrl, zet bgmême en bash.

Vous pouvez en savoir plus sur les Encastrements jobs, disownet le &métacaractère dans la page de manuel pour la bashcommandeIcône de page de manuel , en particulier la section intitulée « contrôle de l' emploi ».

Flimm
la source
avec disownj’ai pu garder le gedit ouvert après la fermeture du terminal. Je n'ai pas compris ce que vous avez dit à propos de "ce n'est pas le cas pour bash, mais c'est le cas pour zsh"
KrIsHnA
0

C'est probablement parce que vous avez ouvert gedit via un terminal. Lorsque vous faites cela, vous voyez la sortie de ligne de commande qui est normalement masquée si elle est démarrée via l'interface graphique. La meilleure solution consiste à ouvrir une nouvelle fenêtre de terminal. L'autre sera disponible après la fermeture de gedit. Vous pouvez également utiliser le commutateur suggéré par l'utilisateur ci-dessus.

utilisateur175759
la source
Une nouvelle fenêtre de terminal encombre le bureau, même si elle est réduite. Utiliser & avec ou sans désaveu est beaucoup plus simple et plus propre.
Joe