Как мне убить процесс, который продолжает возрождаться, не убивая его процесс монитора?

С findmnt (часть util-linux ):

findmnt -no fstype -T /path/to/file

При использовании параметра

-T, --target path
, если путь не файл или каталог точки монтирования, findmnt проверяет элементы пути в обратном порядке, чтобы получить точку монтирования. Два других параметра подавляют строку заголовка: -n, --noheading и выбирают столбцы для отображения: -o, --output

df из coreutils имеет аналогичный параметр - output = , чтобы печатать только определенные поля, например fstype например:

df --output=fstype /path/to/file

нет возможности удалить заголовок, поэтому вам придется передать вывод, например, | sed 1d

3
25.02.2018, 01:35
4 ответа

Sugeriría intentar congelarlo en lugar de matarlo. Dependiendo de cómo lo maneje su proceso de monitoreo, eso podría ser suficiente.

kill -STOP <pid>
7
27.01.2020, 21:07

Una forma segura es cambiar el nombre de ese programa y luego matarlo una vez más. Cuando pueda volver a ejecutarse, devuélvale su nombre original.

5
27.01.2020, 21:07

Lo normal sería cambiar la configuración del programa monitor para que no siga haciendo lo que no quieres que haga. Asumiré que no puede hacer eso por alguna razón, pero cualquier otra cosa es una solución que no funcionará en todas las circunstancias.

No puede incluir en la lista negra un proceso:un proceso es una entidad de tiempo de ejecución. El proceso no existe hasta que se inicia. Una vez que se inicia, es demasiado tarde para evitar que se inicie. ¿Y cómo identificaría el proceso que, de todos modos, no debería haber comenzado?

Puede incluir en la lista negra un programa , o más precisamente, una instalación particular de un programa. Todos los programas se inician desde un archivo ejecutable. Entonces, si hace arreglos para que el archivo ejecutable no exista, no se iniciará. Puede eliminarlo, cambiarle el nombre o simplemente hacer que no sea ejecutable:

chmod a-x /path/to/program

Si no quiere o no puede modificar el sistema de archivos por alguna razón, pero tiene acceso de root, incluso podría usar un marco de seguridad como SELinux o AppArmor para prohibir que el monitor ejecute este programa en particular. Pero eso es más complicado.

Sin embargo, si un monitor sigue intentando reaparecer ese programa, puede o no hacer frente con sensatez si el ejecutable desaparece. Puede enviarle spam (o algunos archivos de registro con mensajes de error ).

Suponiendo que el monitor solo mantiene vivo el programa (en lugar de verificar la funcionalidad del programa, p. un monitor para un proceso de servidor web podría intentar acceder periódicamente a una página web y reiniciar el servidor si no responde ), podría reemplazar el programa por un programa que no hace más que bloquear para siempre. No hay ningún programa que haga esto en la colección de utilidades básicas,pero puedes escribir uno fácilmente:

#!/bin/sh
while sleep 999999999; do :; done

Dependiendo de por qué desea bloquear ese programa, puede o no lograr un resultado similar al suspender el proceso del programa original, con pkill -STOP programnameo kill -STOP 1234donde 1234 es el ID del proceso. Esto mantiene el proceso, pero no hace nada hasta que se reanuda explícitamente (conkill -CONT). El proceso no consumirá tiempo de CPU y su memoria se intercambiará cuando el sistema requiera RAM para otras cosas, pero sigue consumiendo recursos, como archivos abiertos.

13
27.01.2020, 21:07
sudo vi /etc/passwd

Удалить пользователя, под которым программа возрождается. Это остановит процесс и его возрождение.

-1
27.01.2020, 21:07

Теги

Похожие вопросы