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.
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.
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.
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 gedit
name__, 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 jobs
name__.
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 bg
name__.
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).