Angenommen, Sie haben eine neue Anwendung unter Linux gestartet (z. B. einen Texteditor usw.), aber Sie haben vergessen, das "&" zu verwenden. Welche Befehle würden Sie verwenden, um diesen Prozess im Hintergrund auszuführen, ohne diese Anwendung zu schließen? Auf diese Weise können beide Prozesse geöffnet und separat ausgeführt werden (z. B. das Befehlszeilenterminal, mit dem Sie den Prozess erstellt haben, und der Prozess, z. B. ein Texteditor, werden weiterhin ausgeführt.
24
tmux
bietet aber vielleicht die gleiche Funktionalität wie in Ihrer Frage gewünscht.Antworten:
Im Terminalfenster würden Sie normalerweise Control+ Zeingeben, um den Prozess "anzuhalten" und ihn dann mit dem
bg
Befehl "im Hintergrund" zu "unterbrechen" .zB mit einem Schlafbefehl
Wir können sehen, dass der Prozess ausgeführt wird und ich immer noch meine Befehlszeile habe.
quelle
fg
Befehl wieder in den Vordergrund gebracht werden kann , der die Job-ID (1
in diesem Fall in Klammern angegeben ) als Parameter verwendet. Es ist nicht spezifisch für die Verwendung vonbg
und kann für Prozesse ausgeführt werden, die mit gestartet wurden&
.Ctrl+ Zist der Weg, dies zu tun, aber nur der Vollständigkeit halber: Die Frage fragt nach "Befehl" und das wäre (von einem anderen Terminal aus):
und dann natürlich
vom Anwendungsterminal.
quelle
In Bash:
Ctrl+ Zund dann
bg
.Laufen Sie jetzt
jobs
und sehen Sie das Ergebnis.quelle
/bin/sh
und das hätte auch nicht funktioniert :-)Als vorbeugende Maßnahme für die Unannehmlichkeit, CTRL- drücken zu müssen z, könnten Sie ein Wrapper-Skript für Ihren Editor erstellen, auf das Ihr Editor im Hintergrund ausgeführt wird. Auf diese Weise müssen Sie sich nicht mehr daran erinnern, es explizit im Hintergrund zu starten:
Oben versuchen wir zunächst festzustellen, ob ein X-Server verfügbar ist, und führen dann den Editor im Hintergrund aus (andernfalls verwenden viele Unix-Editoren stattdessen Ihr Terminal und möchten den Editor in diesem Fall nicht als Hintergrundprozess ausführen). . Alle Argumente werden wörtlich (
"$@"
) an den Editor Ihrer Wahl übergeben, so wie Sie es für das Wrapper-Skript angegeben haben.Was den Befehl anbelangt, den Sie vermissen ... Nach meinen grundlegenden Experimenten kann es für GUI-Programme, die kein Terminal beinhalten, so einfach sein, zuerst einen Prozess zu senden
SIGSTOP
und ihn dannSIGCONT
in den Vordergrund zu stellen (mithilfe deskill
Befehls, wenn Sie ein Shell-Skript verwenden, um dies zu implementieren). . Sie müssten es natürlich in einem anderen Terminalfenster / -register ausführen, und die Schwierigkeit wäre, die PID, an die Sie Ihr Signal senden möchten, bequem und allgemein zu finden. Sie können die beiden Signale standardmäßig an alle Prozesse mit dem angegebenen Namen senden (standardmäßig an Ihren bevorzugten Editor und die Verwendung von PIDs als Argumente zulassen):Diese Methode gab mir meine Terminal-Tabs korrekt, nachdem ich (mehrere)
emacs
Befehle im Hintergrund ausgeführt hatte. Der im Terminal ausgeführte Emacs-Prozess wurde jedoch aufgrund von Problemen mit der Shell-Jobsteuerung oder den Terminaleinstellungen nicht ordnungsgemäß wiederhergestellt. Diese Methode würde also von einer gewissen Sophistifizierung profitieren.Das
SIGSTOP
ist genau das, was in den Vordergrund Prozess senden wird , wenn Sie die Taste (durch gemeinsamen Standardwert) CTRL- z. Siehestty -a
Ausgabe(Ausgabe abgekürzt) und
stty
Handbuchseite:Prozesse, die mit dem
SIGSTOP
Signal gestoppt wurden, können durch Senden neu gestartet werdenSIGCONT
. Normalerweise ist es die Shell-Job-Steuerungslogik, dieSIGCONT
die anderen notwendigen Manipulationenfg
undbg
Befehle sendet und sich darum kümmert, die wir ignorieren.quelle