Quando você não tem init ou outros processos ao lado do seu shell, não há quase nada para desligar. Na verdade, a única coisa importante é o sistema de arquivos - sincronize-o, desmonte todos os sistemas de arquivos em disco ou remonte como somente leitura (se não puder ser desmontado, por exemplo, o rootfs):
sync
umount /home
mount -o remount,ro /
Depois disso, você também pode puxar o plugue.
Outra coisa que você pode tentar ( mas não tenho ) é iniciar o init original. Certifique-se de que nenhum processo além do shell pid1 esteja sendo executado e, em seguida, mude para o diretório raiz e exec init :
cd /
sync
exec /sbin/init
exec
substitui o processo atual pelo que foi dado, então começou desta forma / sbin / init irá pegar o especial pid 1 do seu shell.
No entanto, se o pid 1 sair, o kernel entrará em pânico imediatamente - então certifique-se de ter pelo menos sync
dos sistemas de arquivos antes de fazer isso.
Quando o kernel entra em pane, ele imprime uma mensagem, começa a piscar os LEDs do teclado e pára todo o resto - ele pára até mesmo o loop que normalmente diz para a CPU permanecer inativa; isso provavelmente é o que causa a loucura do Caps Lock e o alto uso da CPU pela sua máquina virtual.
Seu "algum cara" estava certo - no modo de usuário único real , digitar exit
normalmente alterna para multiusuário ou pelo menos reinicialização limpa. No entanto, init=/bin/bash
não não inicia este modo; ele não inicia nada, além do kernel e do shell bash
. Para alcançar o modo de usuário único real , você precisaria adicionar single
à linha de comando do kernel. (Às vezes, 1
ou s
funciona, mas nem todas as distribuições usam runlevels.) No Ubuntu, isso costumava ser chamado de "modo de recuperação".