
Tengo un usuario antiguo (bob) en mi sistema. Según el resultado de 'top', parece que este usuario ejecuta muchos procesos (el comando para la mayoría de ellos es 'java'). Como tengo acceso de root, eliminé al usuario; sin embargo, los procesos siguen ejecutándose con el usuario como '1000'. ¿Cómo evito que estos procesos se ejecuten permanentemente?
Respuesta1
Si eliminó al usuario y si eso también eliminó cualquier cronjob, etc. que el usuario pudiera haber tenido, entonces reiniciar el sistema debería encargarse de finalizar sus procesos sin reiniciarlos cuando el sistema vuelva a iniciarse.
Si reiniciar no es una opción, puede enviar una señal de terminación a todos los procesos que pertenecen al usuario con UID 1000 usando
sudu pkill -u 1000
Puede ver qué procesos se verían afectados por ese comando ejecutando primero
pgrep -u 1000
Ver también man pkill
.
Respuesta2
Primero guardaré el estado actual de todos los procesos del servidor en un archivo.
ps -wwfax -o uid=,pid=,ppid=,cmd= > /root/list_of_process_as_today.txt
Después me centraré en mi mal usuario.
ps -wwfax -o uid=,pid=,ppid=,cmd= | sed '/^ *1000 *\([0-9][0-9]*\) .*$/p;d'
Un ejemplo de la salida puede ser:
1000 3096 3087 \_ sshd: em444@pts/0
1000 3099 3096 \_ -bash
1000 3543 3099 \_ ps -wwfax -o uid=,pid=,ppid=,cmd=
1000 3544 3099 \_ sed /^ *1000 *\([0-9][0-9]*\) .*$/p;d
1000 21628 1 SCREEN
1000 21629 21628 \_ /bin/bash
Análisis de la lista de procesos.
mi shell actual es el proceso 3099. Puedes ver algún proceso secundario, el comando que ejecuté.3543y uno de los padres3096
Puedes ver que tengo el proceso 21628, su padre es el proceso.1, proceso1es padre de todo proceso.
Después puedo usar este comando para matar todos los procesos.
kill $(/root/list_of_process_as_today.txt | sed 's/^ *1000 *\([0-9][0-9]*\) .*$/\1/p;d')