Como encontro e elimino processos remotos no Linux?

Como encontro e elimino processos remotos no Linux?

Estou desenvolvendo um daemon que está funcionando mal e agora não consigo criar novos processos (ou seja, não consigo iniciar um novo processo para eliminar os outros processos não autorizados). Então, preciso ser capaz de encerrar os processos de uma máquina remota. Como faço para "matar" remotamente sem privilégios de administrador? Se eu não conseguir encerrar meu próprio processo em uma máquina remota como um usuário normal, diga-me para que eu possa marcá-lo como a resposta correta.

Responder1

Para encerrar um processo em execução em uma máquina, algum processo local (ou o kernel) precisa emitir o sinal de eliminação. 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, você precisa encontrar uma maneira que dependa exclusivamente de processos já em execução.

Não existe um daemon padrão que possa ajudá-lo nisso. Todos eles processariam sua autenticação e, em seguida, criariam um novo processo (como um shell) executado como você. Portanto, se você não tem acesso ao console e não tem interação com a máquina, você está sem sorte.


Pelos seus comentários, parece que você ainda tem um shell na máquina. Depois, há coisas que você pode fazer. Você não pode executar nenhum processo externo, como lsou ps. Mas você pode executar comandos integrados como echo, read, e kill( killnão é integrado em todos os shells, mas é um em todos os shells que suportam controle de trabalho, como bash e zsh).

Cada processo possui um diretório associado em /proc: /proc/12345onde 12345 é o ID do processo. Assim, você pode obter algumas informações sobre a existência explorando /proc. echocom curingas é útil aqui, por exemplo, cd /proc; echo [0-9]*mostra os IDs de todos os processos em execução. Se o shell for zsh, você poderá 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 eliminar muitos processos de uma 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 -PGIDonde PGIDestá o ID do processo do líder do grupo. Você pode encontrar o ID do grupo de processos do processo 123 com </proc/123/stat read pid tcomm state ppid pgrp sid more; echo $pgrp. (A mesma informação existe em um formato mais legível, /proc/123/mas você não está em boas condições para 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 diferentes de KILL(9) para que o trapcomando faça com que seu shell ignore o sinal ( KILLnão pode ser capturado).

Responder2

As seguintes informações foram encontradas emhttp://www.cyberciti.biz/faq/kill-process-in-linux-or-terminate-a-process-in-unix-or-linux-systems/

Mate o processo usando o comando kill no Linux/UNIX

O comando kill funciona em sistemas operacionais semelhantes ao Linux e UNIX/BSD.

etapa 1: primeiro, você precisa descobrir o PID do processo (id do processo)

Use o comando ps ou o comando pidof para descobrir o ID do processo (PID). Sintaxe: ps aux | grep nome do processo pidof nome do processo

Por exemplo, se o nome do processo for lighttpd, você poderá usar qualquer um dos seguintes comandos para obter o ID do processo:

ps aux | grep lighttpdOutput

lighttpd  3486  0.0  0.1   4248  1432 ?        S    Jul31   0:00 /usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf
lighttpd  3492  0.0  0.5  13752  3936 ?        Ss   Jul31   0:00 /usr/bin/php5-cg

OU use o comando pidof que é usado para encontrar o ID do processo de um programa em execução:

pidof lighttpd

Saída

3486

Etapa 2: encerrar o processo usando PID (ID do processo)

O comando acima informa o PID (3486) do processo lighttpd. Agora elimine o processo usando este PID:

# kill 3486

OU

# kill -9 3486

Onde, -9 é um sinal Kill especial, que encerrará o processo.

exemplos de comando killall

NÃO USE o comando killall no sistema UNIX (comando somente Linux). Você também pode usar o comando killall. O comando killall mata processos por nome (não há necessidade de encontrar o PID):

# killall -9 lighttpd

Mate o processo do Firefox:

# killall -9 firefox-bin

Como eu disse anteriormente, o killall no sistema UNIX faz outra coisa. Ele mata todos os processos e não apenas processos específicos. Não use killall no sistema UNIX (use kill -9).

Responder3

Como você disse em seu comentário, um administrador é a única pessoa que pode ajudá-lo neste momento. Eu sugiro que você obtenhao livro de receitas Perle leia a seção 16.19 para saber o método correto de lidar com zumbis.

informação relacionada