Digamos que você iniciou um novo aplicativo no Linux (como um editor de texto etc.), mas esqueceu de usar o "&". Quais comandos você usaria para executar esse processo em segundo plano, embora NÃO tivesse que FECHAR esse aplicativo? Dessa maneira, é possível ter os processos abertos e funcionando separadamente (por exemplo, o terminal da linha de comando usado para criar o processo e o processo, como um editor de texto ainda em execução.
24
tmux
ofereça a mesma funcionalidade desejada na sua pergunta.Respostas:
Na janela do terminal, você normalmente digitava Control+ Zpara "suspender" o processo e, em seguida, usava o
bg
comando para "colocá-lo em segundo plano".por exemplo, com um comando de suspensão
Podemos ver que o processo está em execução e ainda tenho minha linha de comando.
fonte
fg
comando, que leva o ID da tarefa (especificado entre parênteses,1
neste caso) como parâmetro. Não é específico ao usobg
e pode ser feito em processos iniciados com&
.Ctrl+ Zé a maneira de fazê-lo, mas apenas para ser completo: a pergunta pede "comando", e seria (de outro terminal):
e depois é claro
do terminal do aplicativo.
fonte
No Bash:
Ctrl+ Ze depois
bg
.Agora corra
jobs
e veja o resultado.fonte
/bin/sh
e por isso este não teria funcionado :-)Como medida preventiva para a inconveniência de ter que pressionar CTRL- z, você pode criar um script de wrapper para o seu editor, para o qual executaria seu editor em segundo plano. Dessa forma, você não precisaria se lembrar de iniciá-lo em segundo plano explicitamente:
Acima, primeiro tentamos determinar se você possui um servidor X disponível e, em seguida, apenas executa o editor em segundo plano (caso contrário, muitos editores do Unix usarão seu terminal e, nesse caso, você não deseja executar o editor como um processo em segundo plano) . Ele passará todos os argumentos para o editor de sua escolha verbatim (
"$@"
), exatamente como você forneceu para o script do wrapper.Quanto ao comando que está faltando ... De acordo com minha experiência básica, para programas GUI que não envolvem terminal, pode ser tão simples quanto o primeiro envio
SIGSTOP
e depoisSIGCONT
para o processo em primeiro plano (usando okill
comando se você usar o shell script para implementar isso) . É claro que você precisaria executá-lo em outra janela / guia do terminal, e a dificuldade seria encontrar de forma conveniente e genérica o PID para o qual você deseja enviar o sinal. Por padrão, você pode enviar os dois sinais para todos os processos do nome fornecido (por padrão, para o seu editor favorito e permitindo o uso de PIDs como argumentos):Esse método me deu corretamente minhas guias de terminal depois de executar (vários)
emacs
comandos em segundo plano. Mas o processo emacs em execução no terminal não foi restaurado adequadamente devido ao controle de tarefas do shell ou à confusão de configurações do terminal. Portanto, esse método se beneficiaria de alguma sofisticação.O
SIGSTOP
é exatamente o que enviar para o processo em primeiro plano quando você pressiona (por padrões comuns) CTRL- z. Consulte astty -a
saída(saída abreviada) e
stty
página de manual:Os processos interrompidos usando o
SIGSTOP
sinal podem ser reiniciados enviandoSIGCONT
. Normalmente, é a lógica de controle de tarefas do shell que enviaSIGCONT
e cuida de outras manipulações necessárias envolvidasfg
ebg
comandos que ignoramos.fonte