Angenommen, Sie starten den Job so
foo
und dann wünschen Sie, dass Sie es in den Hintergrund stellen möchten. Wenn Sie Ctrl+ eingeben Zund dann bgden Trick ausführen, frieren Sie foo
zwischen Ctrl+ Zund ein bg. Wie kann ich foo in den Hintergrund stellen, ohne es vorher einzufrieren?
Antworten:
Technisch
foo
läuft schon im Hintergrund. Sie können eine zweite Terminalsitzung starten, und die erste wird weiter ausgeführt,foo
während Sie andere Aufgaben ausführen .In X müssen Sie lediglich eine zweite Terminalanwendung starten oder eine andere Registerkarte öffnen, wenn der Terminalemulator Ihrer Wahl über solche Funktionen verfügt.
Wenn Sie dies auf der Konsole nicht geplant haben, müssen Sie zu einem anderen virtuellen Terminal wechseln und sich erneut anmelden.
Wenn Sie einen Terminal-Multiplexer wie verwenden
screen
oder einetmux
andere Sitzung darin starten können. Im Bildschirm erfolgt dies beispielsweise mit Ctrl+ Aunmittelbar gefolgt von Ctrl+ C. Um zwischen ihnen zu wechseln, verwenden Sie Ca Cn und Ca Cp, um zwischen Terminalsitzungen hin und her zu wechseln.quelle
foo
selbst (ohne spezifische Überprüfung, die ich in freier Wildbahn vermuten würde, liegt irgendwo zwischen selten und nicht vorhanden) ist es egal, ob es im obersten Fenster ausgeführt wird oder ob etwas seine Ausgabe anzeigt.foo
läuft schon im Hintergrund" zu beginnen ... nur ... Nein. Technisch.foo
also was mache ich jetzt?". Wenn Sie diese Antwort fühlen (oder andere Antworten) sind bei der Beantwortung der Frage nicht sinnvoll, möchte ich Sie ermutigt , Ihr Stimmrecht auszuüben sowie zu verlassen , eine Antwort der eigenen Antwort auf die Frage aus , was Sie fühlen , den richtigen Winkel, anstatt über eine der Antworten auf die Frage streiten . Vielleicht haben Sie zum Beispiel das Gefühl, dass die Antwort von l0b0 besser ist, aber meine Antwort bietet eine Möglichkeit, zumindest ungefähr das zu tun, was das OP will.Wenn Sie
&
nach dem Befehl (foo &
) ein Zeichen hinzufügen, wird es sofort als Hintergrund angezeigt. Ich glaube jedoch, dass es in einer Standard- Terminal- / Shell-Konfiguration keine Möglichkeit gibt, etwas sofort in den Hintergrund zu rücken, wenn es im Vordergrund steht.quelle
Das Senden einer Anwendung vom Vordergrund in den Hintergrund erfordert die Zusammenarbeit sowohl des Terminals als auch der Shell. Das Terminal kann dies nicht alleine tun, da die Shell die Prozessgruppe im Vordergrund festlegen muss. Die Shell kann dies nicht alleine tun, da das Terminal den Tastendruck verarbeiten muss (die Shell steht nicht im Vordergrund, kann also keinen Tastendruck empfangen).
Ich habe eine zsh-Konfiguration, in der ich kurz hintereinander zweimal Ctrl+ drücken kann Z. Die erste Presse unterbricht den Vorgang und die zweite Presse setzt ihn im Hintergrund fort. Ich weiß nicht, wie ich es auf Bash portieren soll.
Wenn Sie in einem Terminalemulator arbeiten, mit dem Sie Tastenanschläge einfügen können, können Sie einfügen
^Zbg^M
(unter Verwendung der^
Notation für Steuerzeichen). Führen Sie beispielsweise mit einem X11-Terminalemulator aus,xdotool --window 1234 Ctrl_L+Z b g Return
wobei 1234 die Fenster-ID des Terminalemulators ist. Führen Sie unter Bildschirm aus,screen -S foo -p 12 -X stuff $'\032bg\r'
wofoo
der Name der Bildschirmsitzung und12
die Fenster-ID angegeben sind.quelle
Wenn Ihre Eingabe für den Fall nicht schnell genug ist, führen Sie sie
kill -s SIGSTOP 1023 && kill -s SIGCONT 1023
von einer anderen Shell aus und nehmen Sie 1023 als Ziel-PID an.HAFTUNGSAUSSCHLUSS: Wie Ruslan wahrscheinlich wusste, startet diese Sequenz den Job tatsächlich so schnell neu, dass sie
bash
ihn nicht bemerkt.quelle