J'ai déjà cherché cela, mais je n'ai jamais trouvé de réponse.
Sous Windows, si une fenêtre de console est ouverte, tapez winmine
et appuyez sur Entrée. Minesweeper apparaîtra, complètement distinct du programme cmd. L'instance Minesweeper n'est pas liée à l'invite de commande de quelque manière que ce soit à ma connaissance, à l'exception du parent de Minesweeper qui est défini sur cette instance de l'invite de commande. C'est différent sous Linux, cependant.
Sous Linux, si une fenêtre de console est ouverte, tapez emacs
et appuyez sur Entrée, Emacs s'ouvrira, mais cela semble lié à la ligne de commande. Plus précisément, il semble que je ne puisse plus utiliser la ligne de commande tant que cette instance d’Emacs n’est pas fermée. Existe-t-il un moyen de répliquer le comportement Windows sous Linux?
Merci!
la source
Réponses:
In
bash
,detach
est intégré, utilisé comme suit:Dans
zsh
, vous pouvez détacher et détacher en une seule opération:la source
Ajouter
&
à la ligne de commande:Cela mettra emacs en arrière-plan et vous permettra de continuer à utiliser votre terminal.
Notez que cela laissera toujours emacs en tant que sous-processus de votre terminal, et lorsque vous quitterez le terminal, il quittera également emacs. Pour éviter cela, tapez:
Les parenthèses indiquent au terminal de détacher le processus emacs du terminal.
Les messages stdout et stderr du programme seront toujours affichés sur le terminal. Pour éviter cela, utilisez:
la source
Ctrl
+C
dans la fenêtre du terminal, cette commande a été émise, le processus est tué: <Utilisez
nohup
. Comme ça:nohup amarok &
J'espère que cela t'aides.
la source
J'ai posté une réponse sur un fil plus ancien de sujets similaires avec des réponses de différentes sources. Voici une copie de cette réponse adaptée à ce fil.
Travaux suivants:
C'est la réponse de Nathan Fellman plus la redirection.
"&> / dev / null" redirige à la fois stdout et stderr vers le périphérique null. La dernière perluète rend le processus exécuté en arrière-plan. Les parenthèses autour de la commande feront que votre "gui_app" s’exécutera dans un sous-shell.
Cela détachera le processus "gui_app" de la console à partir de laquelle vous exécutez cette commande. Ainsi, même si vous fermez l'émulateur de terminal parent de la fenêtre en cours d'exécution, "gui_app" ne se ferme pas. J'ai couru cela puis regardé l'arbre des processus avec la commande "pstree" et trouvé une application démarrée de cette façon deviendra un processus enfant pour "init"
Par exemple,
exécutera l'application en arrière-plan, mais deviendra un processus enfant du processus de la console et se terminera à la fermeture du terminal. (Bien que quitter le terminal par bash en utilisant la commande exit ou Ctrl-D laissera bash nettoyer en passant le processus d’arrière-plan à init.)
"nohup" fonctionne comme NawaMan l'a suggéré, mais cela redirige la sortie et l'erreur vers un fichier par défaut. Comme JeffG a répondu, la commande "désaveu" (si disponible dans un shell) peut détacher le processus du terminal après avoir lancé un processus en arrière-plan:
(BTW tout cela s'applique à bash. Je suis sûr que d'autres shells ont d'autres méthodes / syntaxes pour le faire.)
Quelques références: Processus de désaveu (UNIX Power Tools)
S'il s'agit d'un simple appel à une application graphique - sans options compliquées et autres - il semble que l'utilisation d'un lanceur tel que "gmrun" ou dmenu (warning: un son puissant ) soit également une bonne option. Liez-le à une combinaison de touches. Je n'ai pas encore utilisé de lanceur, mais j'ai essayé ces deux-là.
REMARQUE: CarlF dans les commentaires de l’autre thread signale que les applications graphiques lancées via la méthode "gui_app &" ne se ferment pas lorsqu’il quitte le terminal parent. Je pense que nous fermions le terminal de différentes manières. Je fermais la fenêtre dans laquelle s'exécutait l'émulateur de terminal. Je pense qu'il est peut-être sorti de l'émulateur de terminal via le shell (commande de sortie ou Ctrl-D). J'ai testé cela et vu que quitter via bash n'arrête pas l'interface utilisateur graphique en tant que processus d'arrière-plan du terminal, comme le dit CarlF. Il semble que bash bas les processus d'arrière-plan pour commencer quand il est donné la chance de nettoyer. En fait, il doit s'agir du mécanisme par lequel le processus d'arrière-plan démarré dans un sous-shell est transmis à init.
la source
util-linux inclut un outil appelé setsid qui fait essentiellement ce que detach fait:
Cela fonctionnera
someprogram
dans une nouvelle session.la source
Essayez de taper
xemacs &
pour ouvrir XEmacs en arrière-plan.Ne faites pas référence à cela en tant que "comportement émulé de Windows". Aie.
Vous pourriez aussi:
la source
J'ai mis le code suivant dans un fichier de script exécutable nommé "sbg" pour "fond silencieux". Il fait tout ce qui est nécessaire pour déconnecter complètement le programme démarré du shell: redirige stdin, stdout et stderr de / vers
/dev/null
, ignore les blocages, s’exécute en arrière-plan et se détache.Ensuite, vous pouvez simplement faire
sbg emacs
. Vous pouvez également passer des arguments que vous souhaitez:sbg emacs --daemon FILE1 FILE2
.la source
(gui_app &> /dev/null &)
place (réponse de @ EMPraptor)Mettez une esperluette après la commande.
la source
si vous utilisez bash, vous pouvez désavouer le processus:
la source
Vous pouvez utiliser cette seule ligne:
la source
Comme le disent les autres réponses, vous pouvez utiliser les éléments suivants:
Si vous oubliez
&
cela, appuyez simplement surCtrl-z
puis utilisezbg
:FYI:
Ctrl-z
arrête le processus emacs etbg
envoie en arrière-plan.la source
en utilisant simplement en
&
tant que$ x &
laisse le processus attaché au terminal, j'ai ramassé un petit programme appelédetach
http://inglorion.net/software/detach/ que j'ai aliasé commed
c'est un peu commenohup
mais ne laisse pas derrière un fichier journal i utilisez-le pour détacher mupdf :d mupdf x.pdf
la source
Mettez ceci à votre
~/.bashrc
:Maintenant, vous n'avez plus besoin de vous rappeler quels programmes sont X11 ni de faire des manipulations spéciales à leur place car ils se détacheront automatiquement. Notez que
setsid
c'est mieux quenohup
parce que le dernier bloque le signal HUP, ce qui n'est pas ce dont vous avez besoin.PS Maintenant, vous êtes
winmine
prêt pour Linux.la source