Estou usando o ambiente de desenvolvimento LAMP clássico com WSL2( Ubuntu
) no Windows 10.
Gostaria de desligar o WSL2 após terminar meu trabalho para poder liberar recursos (o processo Vmmem pode consumir recursos).
Posso desligar o WSL2 ( wsl --shutdown
) com segurança sem parar serviços como mysql e apache, ou devo pará-los manualmente antes de desligar o WSL2 ?
Isso importa? Existe alguma boa prática ou algo pode dar errado? Eu não gostaria de estragar meu ambiente (bancos de dados ou apache, etc.)
Por segurança, você deve desligar esses serviços primeiro.
Você deve ser capaz de escrever um pequeno arquivo em lote que encerra tudo na ordem correta.
Eu fiz alguns testes limitados (veja abaixo) com
wsl --terminate <distro>
ewsl --shutdown
, e não parece enviar umSIGTERM
(nem qualquer outro sinal) para subprocessos para permitir que eles terminem com segurança.Como @DavidPostill menciona em sua resposta , concordo que você deve primeiro encerrar esses serviços com segurança.
Alternativo
Como alternativa para criar seus próprios scripts para fazer isso, eu recomendaria iniciar esses serviços sob um supervisor de processo como (o apropriadamente chamado) Supervisor . Com isso em vigor, você pode emitir um único
sudo supervisorctl stop all
para encerrar com segurança (por meio de um padrãoSIGTERM
) todos os serviços associados.Notas de teste limitadas
Meu teste rápido e sujo aqui envolveu o uso do shell Fish (poderia ter sido Bash ou outra coisa, mas esse é meu shell preferido) para registrar manipuladores de sinal.
Primeiro fiz um:
De outro shell (Bash) na mesma distribuição/instância do Ubuntu, executei:
Isso não acionou a função, pois
~/exiting
não foi criada, mas gerou umaTerminated
mensagem do próprio Fish antes de sair.Da mesma maneira:
... gerou uma
Killed
mensagem de Fish, mas sem~/exited
criação de arquivo.Nota para mim mesmo: Não
SIGHUG
...Isso gerou , mas
~/exiting
nenhuma mensagem no terminal.Por outro lado, do PowerShell:
... não gerou nenhuma mensagem do Fish no terminal nem gerou o
~/exiting
arquivo.Em seguida, criei uma armadilha para quase todos os sinais em Fish:
Eu excluí
POLL
eSTKFLT
porque Fish não me deixou criar uma armadilha neles. ExcluíCHLD
porque ele é acionado sempre que um subprocesso termina (praticamente todos os prompts e mais alguns).Para obter a lista completa de sinais capturados:
Com base nisso, refiz os testes acima.
Todos acionaram corretamente a armadilha e gravaram o sinal correspondente no arquivo
~/signals
. Observe que, por causa dotrap
, o shell não sai.Novamente, gerou uma
Killed
mensagem e (como esperado) não acionou a armadilha.Não acionou nenhuma armadilha nem mensagem.
Com base nisso, não me parece que o WSL envie qualquer sinal para subprocessos ao encerrar ou desligar.