web-dev-qa-db-fra.com

Lorsque j'ouvre gedit depuis un terminal, je ne peux plus utiliser le terminal avant d'avoir fermé gedit. Pourquoi?

Je suis TRES nouveau dans le monde de Linux. J'utilise Ubuntu 15.04 sur un ordinateur portable Lenovo. Mon émulateur de terminal est Gnome Terminal.

Je sais quelques petites choses. Disons que je tape cd Documents/terminalpractice/python_folder. Je tape ensuite, par exemple, touch askubuntu.py. J'utilise ensuite la commande gedit askubuntu.py.

A ce moment, l'éditeur de texte gedit s'ouvrira sur mon écran et je suis libre d'essayer de coder autant que je veux. Cependant, dans la fenêtre du terminal, je suppose que le "processus" de gedit est en cours d'exécution? Je ne peux donc pas utiliser le terminal tant que je n’ai pas quitté gedit (j’enregistre puis je clique sur le "X" dans le coin supérieur).

Pourquoi cela arrive-t-il? Je peux utiliser l'interface graphique pour ouvrir les dossiers, double-cliquer sur mon askubuntu.py, et cela s'ouvrira dans gedit, sans affecter ce qui se passe dans le terminal. J'aimerais savoir pourquoi cela se produit.

6
themike_b

Pourquoi cela arrive-t-il?

Quand tu viens de courir:

 gedit filename

il exécute le processus au premier plan. Pour l'envoyer en arrière-plan et continuer à utiliser le terminal, utilisez:

gedit filename &

Notez que ceci (et bien sûr celui ci-dessus) exécutera gedit en tant que sous-processus de votre terminal. Ainsi, lorsque vous quitterez le terminal, il quittera également gedit.

Donc, pour l'exécuter 'gracieusement', utilisez:

Nohup gedit >/dev/null &

Nohup lancera gedit détaché du terminal et par conséquent, il sera immunisé contre tout blocage. >/dev/null redirige la sortie standard vers un emplacement spécial dev/null, empêchant ainsi la création d'un fichier Nohup.out.

Voir man Nohup et this question pour plus d'informations.

17
Ron

C'est normal. Si vous exécutez une commande, le terminal n’obtient pas d’autre commande avant d’avoir terminé. Pour exécuter les commandes à votre guise, appuyez sur ALT + F2 et en tapant la commande dont vous avez besoin.

Si vous le faites dans le terminal, aucune autre commande ne sera acceptée avant la fin des instructions de la commande actuelle.

0
userDepth

C'est parce que vous lancez gedità partir du terminal, au premier plan. Toute commande que vous exécutez de cette manière accaparera l'invite de commande jusqu'à ce que la commande soit terminée. Ainsi, lorsque vous quittez la fenêtre ouverte par geditname__, votre invite de terminal fonctionne à nouveau. Vous pouvez exécuter des commandes en arrière-plan en mettant & à la fin de la commande.

Vous pouvez afficher toutes les commandes d'arrière-plan que vous avez lancées à l'aide de la commande jobsname__.

Vous pouvez également appuyer sur Ctrl+Z Pour suspendre la commande si vous l'avez exécutée normalement, vous pouvez l'envoyer en arrière-plan en saisissant bgname__.

0
Arronical

C'est comme si vous exécutiez un programme ou une application en mode texte: cela commence et le terminal (ainsi, pas le terminal mais l'interpréteur de commandes) ne sera disponible que lorsque l'application sera terminée. Par exemple, lancez "nano" et vous verrez le même comportement (l'interpréteur de commande "s'éclipse" pendant l'exécution de l'application).

Le fait que l'application (gedit) ouvre une fenêtre graphique supplémentaire ne modifie pas le comportement de base sous-jacent.

Lorsque vous lancez une commande sur le terminal, vous pouvez demander à l'interpréteur de commande de l'exécuter en arrière-plan à l'aide de &:

gedit blahblah &

Si la commande est déjà en cours d'exécution (avec le terminal "verrouillé"), vous pouvez appuyer sur ctrl-z (ce qui suspend le processus en cours d'exécution - notez que la fenêtre gedit ne répond plus), puis tapez bg (qui envoie le processus suspendu à l'arrière-plan).

0
roadmr