Отправка приложения из переднего плана в фоновый режим требует взаимодействия как терминала, так и оболочки. Терминал не может сделать это один, потому что оболочка должна установить группу процессов переднего плана. Оболочка не может сделать это одна, потому что терминал должен обрабатывать нажатие клавиши (оболочка не находится на переднем плане, поэтому она не может получить нажатие клавиши).
Близкое приближение - отправить приложение на задний план очень быстро. В конце концов, приложение делит процессорное время с другими, и пауза в несколько сотых секунды не должна иметь значения. (Это относится к приложениям реального времени, поэтому убедитесь, что они запускаются в фоновом режиме.) Я использую привязку оболочки для Ctrl+, Zкоторая отправляет последнее заданное задание в фоновый режим. Таким образом, нажатие Ctrl+ Z Ctrl+ Zотправляет задание в фоновый режим с минимальным временем приостановки.
Вот моя привязка zsh, которая также «фоновая» полусведенная команда, когда командная строка не пуста .
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
На английском языке для не-zsh-пользователей в аудитории:
Если вы просто хотите использовать фоновое поведение независимо от того, пуста ли командная строка:
function bg_ { builtin bg "$@"; }
zle -N bg_
bindkey '^Z' bg_
Я не знаю, можете ли вы сделать то же самое в bash. Это должно быть так же просто bind -x '"\C-z": bg'
, за исключением того, что bash оставляет символ tty stop на месте, поэтому он никогда не получает Ctrl+ Zкак ввод.