Interromper o bash infinito while loop com leitura

2

Este é reconhecidamente um exemplo artificial e vem como resultado da tentativa de criar uma série de comandos bash que podem ser executados de tal forma que não há maneira de retomar o controle do sistema além da reinicialização.

Basicamente, eu queria saber se existe alguma maneira de sair deste estado de comando, assumindo que esta é a primeira coisa que corre após o boot. Para generalizar a questão, existe uma maneira não bloqueada de encerrar qualquer comando em execução sem desligar fisicamente o dispositivo?

while trap '' 2; do read; done;

Edit: Só para esclarecer, estou interessado se isso é possível para o mesmo usuário que executou o comando para fazer dentro do mesmo shell / supondo que a caixa está inacessível através de algo diferente de um teclado físico e esta é a primeira coisa que correu após a inicialização.

    
por pavja2 15.07.2015 / 14:15

1 resposta

3

O simples envio de SIGTERM ou SIGKILL por meio de kill -5 <PID> ou kill -9 <PID> fará com que seu processo termine.

$ cat your_command.sh
while trap '' 2; do read; done;
$ sh your_command.sh
$ ps a | grep 'your_command.sh'
3051 pts/1    S+     0:00 sh your_command.sh
$ kill -5 3051

Mesmo em uma situação em que o usuário é completamente bloqueado, eles podem usar a Chave Magic SysRq . Isso permite que eles enviem comandos de baixo nível diretamente para o kernel e façam algo como matar todos os processos, exceto o PID 1.

    
por 15.07.2015 / 14:33

Tags