Certaines applications de l'interface graphique se lancent proprement via la ligne de commande du terminal, mais d'autres non, et le terminal attend la fin de l'application. Même dans ce cas, certains ne "libèrent" pas la ligne de commande.
Le &
suffixe esperluette mystérieuse semble amener le terminal à mettre le processus en arrière-plan (mais je ne suis pas sûr de ce qui s'y passe).
Existe-t-il un moyen de lancer une application via le terminal afin d'éviter tout effet de blocage, comme si vous lanciez quelque chose via Alt+ F2?
J'aimerais que la ligne de commande soit à nouveau disponible immédiatement, sans que quelque chose soit encore en arrière-plan et en cours d'impression dans le terminal.
command-line
gui
Peter.O
la source
la source
screen
(mentionné par Oli et RobinJ). Je suis impressionné par sa capacité; après avoir lu et l' essayer ... Il ne nécessite que la saisie de:screen -d -m gedit
(ouscreen gedit
alorsCtrl+a d
à se détacher) ... et j'ai encore accès complet à la vue terminal gedit (pour les messages d' avertissement , etc.) à tout moment viascreen -r
même si je ont fermé la fenêtre du terminal d'origine entre-temps ...&
suffixe de la commande. Cela peut être utile pour des éclaircissements: Quelle est la différence entre Terminal, Console, Shell et Ligne de commande?Réponses:
Dans le cas de gedit, je garde juste une copie ouverte tout le temps. Tant que vous avez une copie en cours d'exécution, lancer des
gedit
appels à partir du terminal puis fermer le terminal ne tuera pas gedit.Pour d'autres choses, ce que d'autres personnes ont dit fonctionnerait aussi. Je suis fan de
nohup
... Mais si vous avez besoin d'un terminal, vous pouvez vous en détacher, mais vous le reconnectez ensuite, vous voulez regarderscreen
.irssi
cewatch uptime
serait même un bon exemple.screen -r
and BOOM, vous êtes de retour.screen
est beaucoup plus grand que cela et vous pouvez le combinerbyobu
pour une meilleure expérience de terminal. Lire autour.la source
Supposons que
gedit
le programme que vous souhaitez exécuter soit détaché (ou "désapprouvé", "démêlé", "découplé"). Il y a différentes manières selon ce que vous voulez faire exactement:Programme déjà en cours
Renier:
disown -h
est la voie à suivre si vous voulez le faire avec un programme déjà en cours d’exécution (c’est-à-dire si vous avez oublié de lenohup
faire). Vous devez d'abord l'arrêter avec Ctrl+ Z. Ensuite, vous pouvez mettre en arrière-plan en utilisantbg [jobId]
(par exemplebg 1
). Vous obtenez une liste des travaux en cours avec leur jobId utilisantjobs
. Après cela, vous pouvez le découpler du terminal en utilisantdisown -h %[jobId]
. Exemple de session de terminal:Programme pas encore commencé
nohup
nohup
n'est pas toujours présent sur toutes les machines. Si vous savez que vous souhaitez découpler au préalable, vous utiliserez:Peut - être que vous voulez rediriger la sortie shell ainsi et votre programme une source d'entrée pseudo, donc:
nohup ./myprogram > foo.out 2> bar.err < /dev/null &
. Vous voudriez rediriger la sortie pour ne pas être ennuyé par elle ou pour l'utiliser plus tard. L'entrée nulle peut aider à empêcher les hickups dans SSH, par exemple.Sous-coquille:
Vous pouvez obtenir un effet similaire en
Les crochets ouvrent un nouveau sous-shell dans lequel exécuter gedit. Les
>/dev/null 2>&1
redirections de la sortie du shell vers nulle part (suppression de la sortie). Et la&
fin met le processus en arrière-plan.Multiplexage terminal
Aussi multiplexage terminal en utilisant screen ou byobu . Vous exécutez essentiellement le programme dans un terminal qui lui est propre. Je peux vraiment recommander byobu pour d'autres raisons aussi. Vous trouverez ci-dessous une liste de raccourcis boybu qui pourraient vous être utiles pour vos premiers pas:
Utile:
Moins utile:
Le démon 'at' et d'autres
at
est un petit outil utile pour exécuter une commande à une heure programmée. Il peut être "abusé" de détacher une commande du shell:Aussi, vous pouvez examiner
setsid
etstart-stop-daemon
, mais les autres méthodes devraient suffire.la source
bg %1
vous pouvez simplement taper à la placebg
.C'est le cas et c'est souvent ce que vous voulez. Si vous oubliez d'utiliser &, vous pouvez suspendre le programme avec ctrl-z, puis le placer en arrière-plan avec la commande bg - et continuer à utiliser ce shell.
Les processus stdin, stdout et stderr sont toujours connectés au terminal; vous pouvez rediriger ceux-ci de / vers / dev / null ou tout autre fichier (par exemple, enregistrer un journal de sortie quelque part), comme vous le souhaitez:
Vous pouvez voir le processus dans les tâches, le ramener au premier plan (commande fg) et lui envoyer des signaux (commande kill).
Certains programmes graphiques se détacheront du terminal; Si c'est le cas, lorsque vous exécuterez la commande "normalement", vous remarquerez qu'il lance le programme graphique et qu'il "quitte".
Voici un court script que vous pouvez placer dans ~ / bin , que j'ai nommé runbg:
Je cherche le programme ($ prog) avant de rediriger les erreurs pour le localiser. Exécutez-le en tant que "runbg your-command args ..."; vous pouvez toujours rediriger stdout / err vers un fichier si vous devez enregistrer la sortie quelque part.
À l'exception des redirections et du traitement des erreurs, cela équivaut à la réponse de htorque .
la source
ctrl-z
(suspendre) me donne à nouveau accès à la ligne de commande, mais efface l'interface graphique jusqu'à ce que je sois sûr debg
ne pas le suspendre. (logique) ... Existe-t-il une autre commande permettant de détacher l'interface graphique ... Aha! Je vois maintenant ce que vous entendez parsighals (kill command)
... (choses intéressantes ces signaux) .. J'ai utilisé un extrait de code pour le fairedd
afficher progressivement stats .. et il a utilisékill
+ un SIGNAL ... Y a-t-il un SIGNAL spécifique pour détacher un "travail "?disown
travaux -p gedit`` et il a semblé supprimer le travail .... (mais j'ai reçu des messages système dans le terminal lorsque j'ai fermé manuellement gedit ... mais je pense J'ai un terminaljobs -p command
si vous avez plusieurs instances d'une commande s'exécutant en arrière-plan à la fois. vous pouvez utiliserjobs
pour trouver le bon identifiant de travail puis le fairejobs -p <job-id>
pour obtenir le PID du travail. Personnellement je trouve la version avec le sous-shell beaucoup plus facile. ;-)gedit & disown
Pour démarrer une application et la dissocier du terminal lancé, utilisez & !.
la source
disown <pid-of-command>
après avoir lancé la commande en arrière-plan.Utilisation
nohup
Par exemple:
la source
nohup
? S'il vous plaît élaborer.nohup
devrait être utilisé dans ce scénario.nohup
application (et ledisown
bash builtin) ne permet pas au signal d'atteindre l'application.nohup
crée un fichier dans le répertoire courant appelénohup.out
. Voir la page de manuel pour plus de détails. Je préfèredisown
pour cette raison, et pour le fait que celadisown
fonctionne après votre lancementgedit
.Ouvrez le terminal, tapez screen , tapez la commande que vous voulez exécuter, fermez le terminal. Le programme devrait continuer à fonctionner dans la session GNU Screen .
la source
Cela a fonctionné pour moi:
la source
xdg-open
Jetez un coup d'œil à cet utilitaire polyvalent: https://linux.die.net/man/1/xdg-open
Cela ouvrira un emplacement relatif dans votre gestionnaire de fichiers.
Cela ouvrira un fichier pdf dans un lecteur de pdf.
Vous pouvez même fournir des URL Web
la source
Comme beaucoup de gens l'ont compris, nohup est la chose à considérer. Mais nohup stills reste ouvert sur le terminal et affiche l'activité du programme sur le terminal qui est irritante. Vous pouvez simplement fermer le terminal après cela pour éviter cela. J'ai découvert une solution de contournement très simple que j'utilise.
Et c'est tout. Il ouvre gedit et ferme le terminal lorsque gedit démarre. Comme gedit n’est pas associé au terminal, il reste actif.
la source
Cela fonctionne même à l'intérieur d'un script (comme les alias, la bande-annonce n'est pas autorisée dans les scripts car ils ne sont pas interactifs):
la source
Cela a fonctionné pour moi:
la source