O envio de um aplicativo de primeiro plano para o segundo plano requer cooperação do terminal e do shell. O terminal não pode fazer isso sozinho, porque o shell precisa definir o grupo de processos em primeiro plano. O shell não pode fazer isso sozinho, porque o terminal precisa processar o pressionamento de tecla (o shell não está em primeiro plano, portanto, não pode receber um pressionamento de tecla).
Uma aproximação aproximada é enviar o aplicativo para o plano de fundo muito rápido. Afinal, um aplicativo compartilha o tempo da CPU com outros e uma pausa de alguns centésimos de segundo não deve importar. (Aplica-se a aplicativos em tempo real, portanto, inicie-os em segundo plano.) Uso uma ligação de shell para Ctrl+ Zque envia o último trabalho em primeiro plano para o segundo plano. Dessa forma, pressionar Ctrl+ Z Ctrl+ Zenvia um trabalho para o segundo plano com um tempo mínimo de suspensão.
Aqui está minha ligação do zsh, que também “ coloca em segundo plano” um comando meio digitado quando a linha de comando não está vazia .
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
Em inglês, para os não usuários do zsh na platéia:
Se você deseja apenas o comportamento de segundo plano, independentemente de a linha de comando estar vazia:
function bg_ { builtin bg "$@"; }
zle -N bg_
bindkey '^Z' bg_
Não sei se você pode fazer o mesmo no bash. Deve ser tão fácil quanto bind -x '"\C-z": bg'
, exceto que o bash deixa o caractere de parada tty no lugar, para nunca receber Ctrl+ Zcomo entrada.