Wie kann ich einen Befehl vom Terminal aus ausführen, ohne ihn zu blockieren?

43

Ich führe viele Programme in Ubuntu über das Terminal aus, möchte das Terminal aber weiterhin verwenden können, nachdem ich ein Programm geöffnet habe. Wie kann ich die Programme in den Hintergrund stellen, damit ich kein weiteres Fenster öffnen muss?

Salvador Dali
quelle

Antworten:

60

Es gibt verschiedene Möglichkeiten, ein Terminalprogramm auszuführen und das Terminal weiter zu verwenden:

  • Sie können eine andere Terminalregisterkarte öffnen (klicken Sie mit der rechten Maustaste und wählen Sie "Neue Registerkarte öffnen").
  • Sie können &den ausgeführten Befehl anhängen . Beachten Sie, dass Sie keine Textausgabe auf dem Terminal sehen, z. B. Fehlermeldungen.
  • Sie können eingeben Ctrl- Zund dann ausführen bg. Dies hat den gleichen Effekt wie das Laufencommand &
  • Sie können ausführen nohup command &und dann die Eingabetaste drücken. (Dank ccpizza , siehe Kommentare unten.)

Allerdings drücken Alt- F2und dann Befehl in der GUI ausgeführt wird in der Regel am beste Praxis betrachtet - überhaupt kein Terminal ist!

Beachten Sie, dass bei Verwendung von &(nicht nohup) das Schließen des Terminals die Anwendung immer noch beendet, es sei denn, Sie führen sie disownanschließend aus .

BEARBEITEN: Es sieht so aus, als würde bei der Verwendung nohupmanchmal etwas Kot in Ihrem privaten Ordner zurückbleiben. Was normalerweise im Terminal protokolliert worden wäre, wird anscheinend in einer Datei in ~ / gespeichert.

~~

Eine einfache Möglichkeit, ein Programm im Hintergrund auszuführen, besteht darin program-name & disown, Sie zu einem Terminal zu bringen, das geschlossen werden kann, ohne den Vorgang zu beenden.

WindowsEscapist
quelle
4
Um zu verhindern, dass der untergeordnete Prozess nach dem Schließen des Terminals beendet wird, können Sie Ihre App als starten nohup firefox&.
ccpizza
Cool! Ich wusste das nicht (aber beim Experimentieren ist das Terminal immer noch "blockiert")!
WindowsEscapist
es ist nicht "blockiert", es sieht nur "blockiert" aus, wenn Sie die Eingabetaste einmal drücken, wird eine Eingabeaufforderung angezeigt.
ccpizza
Ah, das habe ich vorher nicht bemerkt.
WindowsEscapist
program-name & disownist eine schöne Lösung
Doktor Henry
8

Sie können den Befehl mit einem & after ausführen.

Beispielsweise:

Thunderbird &

Siehe hier für weitere Informationen.

Viertaxa
quelle
Dies funktioniert nur, bis Sie das Terminalfenster schließen. Sobald Sie das Fenster schließen, wird das Programm beendet
kurdtpage
6

Mit können Sie setsiddas Programm in einer neuen Sitzung ausführen, &>/dev/nullsodass Sie keine Protokollmeldungen erhalten.

So würde es sein

setsid program-name &>/dev/null

Rumid
quelle
Cool. Der Prozess muss ausgeführt werden, wenn der Benutzer sich abmeldet und die aktuelle Sitzung geschlossen wird.
Mikhail Moskalev
1

Mit dem screenBefehl können Sie mehrere Terminalsitzungen in einem einzigen Fenster öffnen und auf tippen

apt-get install screen (On Debian based Systems)

yum install screen (On RedHat based Systems)

screen (Neuen Bildschirm starten)

[Your command]

Ctrl+A d Bildschirm verlassen ... und so weiter

https://linuxize.com/post/how-to-use-linux-screen/

Ahmed Ismail
quelle
0

Sie können es in einem virtuellen Terminal ausführen wie tmux(oder screenich habe gehört, dass es nicht mehr gewartet wird)

# This ataches your terminal to a virtual terminal
tmux
run_your_command
# This detaches your virtual terminal (previous command can be running)
CTRL-b d
run_other_commands # on your terminal
# re-attach the virtual terminal to see the status of run_your_command
tmux a

tmux kann noch viel mehr, wie:

  • Verschieben Sie Ihr virtuelles Terminal auf ein anderes Terminal
  • teile das virtuelle Terminal auf mehrere Terminals (andere Benutzer können sehen, was du tust ;-))
  • Teilen Sie den "Bildschirm", um mehrere Terminals zu haben.
  • ...

https://www.hamvocke.com/blog/a-quick-and-easy-guide-to-tmux/

Sebastien DA ROCHA
quelle