Para matar um processo rodando em uma máquina, algum processo local (ou o kernel) tem que emitir o sinal de morte. Portanto, você precisa de uma maneira de fazer com que um processo emita esse sinal e, como não é possível criar um novo processo, é necessário encontrar uma forma que dependa exclusivamente de processos já em execução.
Não há daemon padrão que possa ajudá-lo. Todos eles processariam sua autenticação e, em seguida, bifurcariam um novo processo (como um shell) sendo executado como você. Então, se você não tem acesso ao console e não tem nenhuma interação com a máquina, você está sem sorte.
Dos seus comentários, parece que você ainda tem um shell na máquina. Então há coisas que você pode fazer. Você não pode executar nenhum processo externo, como ls
ou ps
. Mas você pode executar comandos internos, como echo
, read
e kill
( kill
não é interno em todos os shells, mas é um em todos os shells que suportam controle de tarefa, como bash e zsh).
Cada processo tem um diretório associado em /proc
: /proc/12345
, em que 12345 é o ID do processo. Assim, você pode obter algumas informações sobre a exploração explorando /proc
. echo
com curingas é útil aqui, por exemplo cd /proc; echo [0-9]*
mostra os ids do processo de todos os processos em execução. Se o shell é zsh, você pode fazer muito com qualificadores glob; por exemplo, echo /proc/*(u$UID)
mostra apenas os processos em execução sob seu ID de usuário.
Uma maneira de exibir o conteúdo de um arquivo sem bifurcar é
while read -r line; do
echo "$line"
done </path/to/file
Você pode matar muitos processos de uma só vez passando todos eles para kill
. Se você identificou um processo que pertence ao seu daemon, tente eliminar seu grupo de processos com kill -9 -PGID
, em que PGID
é o ID do processo do líder do grupo. Você pode encontrar o ID do processo do processo 123 com </proc/123/stat read pid tcomm state ppid pgrp sid more; echo $pgrp
. (A mesma informação existe em uma forma mais legível em /proc/123/
, mas você não está em condições de lê-la.) Você também pode tentar enviar um sinal para todos os seus processos (incluindo o shell de origem) com
trap : NUM
kill -NUM -1
Escolha valores de NUM diferente de KILL
(9) para que o comando trap
faça com que seu shell ignore o sinal ( KILL
não pode ser interceptado).