Como você envia aplicativos de linha de comando diretamente para o segundo plano?

18

Eu já sei que pressionar ctrl+z para o aplicativo, então eu posso enviar o aplicativo para o plano de fundo com o comando bg , mas isso significa que há um breve período de tempo em que o aplicativo é interrompido.

Como faço para enviar o aplicativo diretamente para o segundo plano sem interrompê-lo?

    
por trusktr 01.04.2013 / 01:21

3 respostas

16

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 tem que processar a tecla pressionada (o shell não está em primeiro plano, portanto não pode receber um pressionamento de tecla).

Uma boa aproximação é enviar o aplicativo para o fundo muito rápido. Afinal, um aplicativo compartilha o tempo de CPU com outros e uma pausa de alguns centésimos de segundo não importa. (Ele faz para aplicativos em tempo real, portanto, certifique-se de iniciá-los em segundo plano.) Eu uso uma ligação de shell para Ctrl + Z que envia o último trabalho em primeiro plano para o fundo. Dessa forma, pressionar Ctrl + Z Ctrl + Z envia uma tarefa para o segundo plano com o mínimo de tempo de suspensão. / p>

Esta é a minha ligação zsh, que também " Background "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 usuários não zsh no público:

  • Defina uma função de shell que faça o seguinte:

  • Vincule essa função a Ctrl + Z .

Se você quiser apenas o comportamento de segundo plano, independentemente de a linha de comando estar vazia:

function bg_ { builtin bg "$@"; }
zle -N bg_
bindkey '^Z' bg_

Eu 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 tty stop no lugar, então ele nunca recebe Ctrl + Z como entrada.

    
por 02.04.2013 / 02:28
14

Você pode criar uma tarefa em segundo plano adicionando um & depois dela.

Por exemplo, tail -f /var/log/messages & irá basear a tarefa imediatamente.

Como sempre, você pode ver as tarefas com base no comando jobs .

Isto, obviamente, assume que você ainda não executou o comando.

    
por 01.04.2013 / 01:39
4

O uso de um comando em segundo plano é feito anexando-se um e comercial ao comando.

sleep 300 &

Se ele já está sendo executado, sua única opção é pará-lo e depois contextualizá-lo.

    
por 01.04.2013 / 01:40