Ich habe schon einmal danach gesucht, aber noch nie eine Antwort gefunden.
Wenn in Windows ein Konsolenfenster geöffnet ist winmine
, geben Sie Folgendes ein und drücken Sie die Eingabetaste. Minesweeper wird vollständig unabhängig vom cmd-Programm angezeigt. Die Minesweeper-Instanz ist in keiner mir bekannten Weise an die Eingabeaufforderung gebunden, mit Ausnahme des übergeordneten Elements von Minesweeper, das auf diese Instanz der Eingabeaufforderung festgelegt ist. Unter Linux ist das jedoch anders.
Wenn unter Linux ein Konsolenfenster geöffnet ist, geben Sie Folgendes ein emacs
und drücken Sie die Eingabetaste. Emacs wird geöffnet, scheint jedoch an die Befehlszeile gebunden zu sein. Insbesondere scheint es, dass ich die Befehlszeile nicht mehr verwenden kann, bis diese Instanz von Emacs geschlossen ist. Gibt es eine Möglichkeit, das Windows-Verhalten unter Linux zu replizieren?
Vielen Dank!
quelle
Antworten:
In
bash
,detach
ist ein eingebautes, wie folgt verwendet:In
zsh
können Sie in einem einzigen Vorgang Hintergrundinformationen hinzufügen und trennen:quelle
Fügen Sie
&
auf der Kommandozeile:Dadurch wird der Emacs in den Hintergrund gestellt und Sie können Ihr Terminal weiterhin verwenden.
Beachten Sie, dass Emacs weiterhin als Unterprozess Ihres Terminals verbleibt. Wenn Sie das Terminal verlassen, wird auch Emacs beendet. Um dies zu vermeiden, geben Sie Folgendes ein:
Die Klammern weisen das Terminal an, den Emacs-Prozess vom Terminal zu trennen.
Auf dem Terminal werden weiterhin Standard- und Standardnachrichten des Programms angezeigt. Um dies zu verhindern, verwenden Sie:
quelle
Ctrl
+C
im Terminalfenster wurde dieser Befehl ausgegeben, der Prozess wird abgebrochen: <Verwenden Sie
nohup
. So was:nohup amarok &
Hoffe das hilft.
quelle
Ich habe eine Antwort auf einen älteren Thread mit ähnlichen Themen mit Antworten aus verschiedenen Quellen gepostet . Es folgt eine Kopie dieser Antwort, die für diesen Thread angepasst wurde.
Folgende Arbeiten:
Dies ist die Antwort von Nathan Fellman plus Weiterleitung.
"&> / dev / null" leitet sowohl stdout als auch stderr zum null-Gerät um. Das letzte kaufmännische Und bewirkt, dass der Prozess im Hintergrund ausgeführt wird. Die Klammern um den Befehl führen dazu, dass "gui_app" in einer Subshell ausgeführt wird.
Dadurch wird der "gui_app" -Prozess von der Konsole getrennt, von der aus Sie diesen Befehl ausführen. Selbst wenn Sie das Fenster schließen, in dem der übergeordnete Terminalemulator ausgeführt wird, wird "gui_app" nicht geschlossen. Ich habe dies ausgeführt und dann den Prozessbaum mit dem Befehl "pstree" angesehen und festgestellt, dass eine auf diese Weise gestartete Anwendung ein untergeordneter Prozess für "init" wird.
Zum Beispiel,
führt die Anwendung im Hintergrund aus, wird jedoch zu einem untergeordneten Prozess des Konsolenprozesses und wird beendet, wenn Sie das Terminal schließen. (Obwohl das Terminal mit dem Befehl exit oder Strg-D durch Bash verlassen wird, kann Bash bereinigt werden, indem der Hintergrundprozess an init übergeben wird.)
"nohup" funktioniert wie von NawaMan vorgeschlagen, leitet jedoch Ausgabe und Fehler standardmäßig in eine Datei um. Wie JeffG geantwortet hat, kann der Befehl "disown" (falls in der Shell verfügbar) den Prozess vom Terminal trennen, nachdem Sie einen Hintergrundprozess gestartet haben:
(Übrigens gilt das alles für Bash. Ich bin sicher, dass andere Shells andere Methoden / Syntax haben, um dies zu tun.)
Einige Verweise: Prozesse ablehnen (UNIX Power Tools)
Wenn es ein einfacher Anruf auf eine GUI - Anwendung - ohne komplizierte Optionen und so - es scheint , einen Starter wie „gmrun“ mit oder dmenu (Warnung: laut Audio) ist auch eine gute Option. Binden Sie es an eine Tastenkombination. Ich benutze noch keinen Launcher, habe die beiden aber ausprobiert.
HINWEIS: CarlF in den Kommentaren der anderen Thread- Berichte GUI-Apps, die über die Methode "gui_app &" gestartet wurden, werden nicht geschlossen, wenn er das übergeordnete Terminal verlässt. Ich denke, wir haben das Terminal auf verschiedene Arten geschlossen. Ich habe das Fenster geschlossen, in dem der Terminalemulator ausgeführt wurde. Ich glaube, er hat den Terminalemulator möglicherweise über die Shell verlassen (Befehl exit oder Strg-D). Ich habe dies getestet und festgestellt, dass das Beenden durch Bash die GUI nicht anhält, die als Hintergrundprozess für das Terminal gestartet wurde, wie CarlF sagt. Es scheint, dass Bash-Hands-Off-Hintergrundprozesse initiiert werden, wenn die Möglichkeit zum Aufräumen besteht. Tatsächlich muss dies der Mechanismus sein, mit dem der in einer Subshell gestartete Hintergrundprozess an init übergeben wird.
quelle
util-linux enthält ein Tool namens setsid, das im Grunde das tut, was detach tut:
Dies wird
someprogram
in einer neuen Sitzung ausgeführt.quelle
Versuchen Sie
xemacs &
, XEmacs im Hintergrund zu öffnen.Bitte bezeichnen Sie dies nicht als "Windows-Verhalten emulieren". Autsch.
Du könntest auch:
quelle
Ich habe den folgenden Code in eine ausführbare Skriptdatei mit dem Namen "sbg" für "Silent Background" eingefügt. Es erledigt alle notwendigen Dinge, um das gestartete Programm vollständig von der Shell zu trennen: Leitet stdin, stdout und stderr von / nach um
/dev/null
, ignoriert Hangups, läuft im Hintergrund und trennt sich.Dann kannst du einfach machen
sbg emacs
. Sie können auch alle Argumente übergeben Sie wollen:sbg emacs --daemon FILE1 FILE2
.quelle
(gui_app &> /dev/null &)
stattdessen verwendet habe (@ EMPraptors Antwort)Fügen Sie nach dem Befehl ein kaufmännisches Und ein.
quelle
Wenn Sie Bash verwenden, können Sie den Prozess ablehnen:
quelle
Sie können diese einzelne Zeile verwenden:
quelle
Wie die anderen Antworten sagen, können Sie Folgendes verwenden:
Wenn Sie das
&
allerdings vergessen haben , drücken Sie einfachCtrl-z
und verwenden Siebg
:Zu Ihrer Information:
Ctrl-z
Stoppt den Emacs-Prozess undbg
sendet in den Hintergrund.quelle
nur unter Verwendung von
&
wie in$ x &
verlässt das Verfahren an das Endgerät angebracht ich ein kleines Programm namens abgeholtdetach
http://inglorion.net/software/detach/ , die ich aliased haben , wied
es ein bisschen wie istnohup
aber nicht hinter einer Protokolldatei verlassen i benutze es um mupdf abzutrennen :d mupdf x.pdf
quelle
Setzen Sie dies zu Ihrem
~/.bashrc
:Jetzt müssen Sie sich nicht mehr erinnern, welche Programme X11 sind, und spezielle Manipulationen für sie durchführen, da sie sich automatisch lösen. Beachten Sie, dass dies
setsid
besser ist als,nohup
weil das letzte HUP-Signal blockiert, was nicht das ist, was Sie benötigen.PS: Jetzt bist du
winmine
schon in Linux.quelle