Das Senden einer Anwendung vom Vordergrund in den Hintergrund erfordert die Zusammenarbeit von Terminal und Shell. Das Terminal kann dies nicht alleine tun, da die Shell die Vordergrundprozessgruppe festlegen muss. Die Shell kann dies nicht alleine tun, da das Terminal den Tastendruck verarbeiten muss (die Shell ist nicht im Vordergrund, daher kann sie keinen Tastendruck empfangen).
Eine gute Annäherung ist, die Anwendung sehr schnell in den Hintergrund zu schicken. Immerhin teilt eine Anwendung die CPU-Zeit mit anderen und eine Pause von einigen Hundertstelsekunden sollte keine Rolle spielen. (Dies gilt für Echtzeitanwendungen. Stellen Sie daher sicher, dass Sie diese im Hintergrund starten.) Ich verwende eine Shell-Bindung für Ctrl+ Z, die den zuletzt vordergründigen Job an den Hintergrund sendet. Auf diese Weise wird durch Drücken von Ctrl+ Z Ctrl+ Zein Auftrag mit minimaler Unterbrechungszeit in den Hintergrund verschoben.
Hier ist meine zsh-Bindung, die auch einen halb getippten Befehl „im Hintergrund“ darstellt, wenn die Befehlszeile nicht leer ist .
fancy-ctrl-z () {
emulate -LR zsh
if [[ $#BUFFER -eq 0 ]]; then
bg
zle redisplay
else
zle push-input
fi
}
zle -N fancy-ctrl-z
bindkey '^Z' fancy-ctrl-z
Auf Englisch für die Nicht-zsh-Benutzer im Publikum:
Wenn Sie nur das Hintergrundverhalten wünschen, unabhängig davon, ob die Befehlszeile leer ist:
function bg_ { builtin bg "$@"; }
zle -N bg_
bindkey '^Z' bg_
Ich weiß nicht, ob Sie dasselbe in Bash tun können. Es sollte so einfach wie möglich sein bind -x '"\C-z": bg'
, mit der Ausnahme, dass die Bash das Tty-Stop-Zeichen an der richtigen Stelle belässt, sodass es niemals Ctrl+ Zals Eingabe erhält .