Como colocar o sub shell e os comandos relacionados em segundo plano?

4

Execute um comando de sequência em um sub shell assim:

(git pull;git rebase develop)&>/dev/null 

Acho que isso colocará o sub shell e todos os processos filhos criados por ele em segundo plano e retornará o controle para o usuário.

Mas, na verdade, o terminal desligar por um tempo, parece que é esperar que os comandos terminem em sub shell.

Então, alguém pode explicar por que isso aconteceu e qual é o caminho certo para fazer esse tipo de trabalho.

    
por Karl 01.09.2016 / 08:17

2 respostas

2

Se você estiver executando o bash shell, o &>/dev/null redirecionará a saída padrão e os fluxos de erro para /dev/null (é o mesmo que >/dev/null 2>&1 ), mas não executará o ( ... ) Subshell como um processo assíncrono. Para isso, você precisará adicionar um & extra no final:

(git pull; git rebase develop) &>/dev/null &

ksh93 não tem esse recurso e não está no POSIX.

    
por 01.09.2016 / 08:24
2

Você pode adicionar sleep no seu caso e & no final do comando para colocá-los em segundo plano,

(git pull; sleep 3; git rebase develop) &>/dev/null &

Como alternativa, você pode usar

for cmd in $commands
do
    "$cmd" &
done
wait

O & no final do comando o executa em segundo plano, e o wait aguarda até que a tarefa em segundo plano seja concluída.

    
por 01.09.2016 / 08:30