¿Cómo encuentro y elimino procesos remotos en Linux?

¿Cómo encuentro y elimino procesos remotos en Linux?

Estoy desarrollando un demonio que está funcionando mal y ahora no puedo crear ningún proceso nuevo (es decir, no puedo iniciar un nuevo proceso para eliminar los otros procesos no autorizados). Por lo tanto, necesito poder finalizar los procesos desde una máquina remota. ¿Cómo puedo "matar" de forma remota sin privilegios de administrador? Si no puedo eliminar mi propio proceso desde una máquina remota como usuario normal, dímelo para poder marcarlo como la respuesta correcta.

Respuesta1

Para eliminar un proceso que se ejecuta en una máquina, algún proceso local (o el núcleo) debe emitir la señal de eliminación. Por lo tanto, necesita una manera de hacer que un proceso emita esa señal y, dado que no puede crear un proceso nuevo, necesita encontrar una manera que dependa exclusivamente de los procesos que ya se están ejecutando.

No existe ningún demonio estándar que pueda ayudarte en ese sentido. Todos procesarían su autenticación y luego bifurcarían un nuevo proceso (como un shell) que se ejecutaría como usted. Entonces, si no tiene acceso a la consola y no tiene interacción con la máquina, no tiene suerte.


Según sus comentarios, parece que todavía tiene un shell en la máquina. Luego hay cosas que puedes hacer. No puede ejecutar ningún proceso externo, como lso ps. Pero puede ejecutar comandos integrados como echo, ready kill( killno está integrado en todos los shells, pero sí en todos los shells que admiten el control de trabajos, como bash y zsh).

Cada proceso tiene un directorio asociado en /proc: /proc/12345donde 12345 es la identificación del proceso. Por lo tanto, puede obtener información sobre la existencia explorando /proc. echocon comodines es útil aquí, por ejemplo, cd /proc; echo [0-9]*muestra los identificadores de todos los procesos en ejecución. Si el shell es zsh, puedes hacer mucho con los calificadores globales; por ejemplo, echo /proc/*(u$UID)muestra solo los procesos que se ejecutan con su identificación de usuario.

Una forma de mostrar el contenido de un archivo sin bifurcar es

while read -r line; do
  echo "$line"
done </path/to/file

Puedes eliminar muchos procesos a la vez pasándolos todos a kill. Si ha identificado un proceso que pertenece a su demonio, intente eliminar su grupo de procesos con kill -9 -PGIDla identificación PGIDdel proceso del líder del grupo. Puede encontrar la identificación del grupo de procesos del proceso 123 con </proc/123/stat read pid tcomm state ppid pgrp sid more; echo $pgrp. (La misma información existe en una forma más legible en /proc/123/pero no estás en buenas condiciones para leerla). También puedes intentar enviar una señal a todos tus procesos (incluido el shell de origen) con

trap : NUM
kill -NUM -1

Elija valores de NUM distintos de KILL(9) para que el trapcomando haga que su shell ignore la señal ( KILLno puede ser atrapado).

Respuesta2

La siguiente información fue encontrada enhttp://www.cyberciti.biz/faq/kill-process-in-linux-or-terminate-a-process-in-unix-or-linux-systems/

Elimine el proceso usando el comando kill en Linux/UNIX

El comando kill funciona tanto en sistemas operativos tipo Linux como UNIX/BSD.

Paso 1: primero, debe averiguar el PID del proceso (identificación del proceso)

Utilice el comando ps o el comando pidof para averiguar el ID del proceso (PID). Sintaxis: ps aux | grep nombre del proceso pidof nombre del proceso

Por ejemplo, si el nombre del proceso es lighttpd, puede utilizar cualquiera de los siguientes comandos para obtener el ID del proceso:

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

O use el comando pidof que se usa para encontrar el ID del proceso de un programa en ejecución:

pidof lighttpd

Producción

3486

Paso # 2: elimine el proceso usando PID (identificación del proceso)

El comando anterior le indica el PID (3486) del proceso lighttpd. Ahora finalice el proceso usando este PID:

# kill 3486

O

# kill -9 3486

Donde -9 es una señal de interrupción especial, que finalizará el proceso.

ejemplos de comandos killall

NO UTILICE el comando killall en el sistema UNIX (comando solo Linux). También puedes usar el comando Killall. El comando killall elimina procesos por nombre (no es necesario encontrar PID):

# killall -9 lighttpd

Mata el proceso de Firefox:

# killall -9 firefox-bin

Como dije antes, killall en el sistema UNIX hace algo más. Mata todos los procesos y no solo procesos específicos. No utilice Killall en el sistema UNIX (use Kill -9).

Respuesta3

Como dijiste en tu comentario, un administrador es la única persona que puede ayudarte en este momento. te sugiero que obtengasel libro de cocina de Perly lea la sección 16.19 para conocer el método correcto para manejar zombis.

información relacionada