¿Existe un mecanismo en Unix (o Linux) para detener un volcado de núcleo en progreso?

15

Digamos que un proceso (muy) grande se está bloqueando y volcando el núcleo, y conocemos la causa de otra información (posiblemente un mensaje de afirmación, tal vez algo más).

¿Hay alguna manera de evitar que el volcado de núcleo se genere por completo, ya que es un desperdicio en este caso?

Por ejemplo, ¿mataría -9 de un proceso de descarga de núcleo interrumpiría la generación del archivo de núcleo?

Obviamente, si supiéramos de antemano que no queremos volcados del núcleo, podríamos establecer el ulimit de manera adecuada o utilizar las diversas utilidades de control de archivos principales del sistema operativo.

Pero esta pregunta es sobre la etapa de "volcado del núcleo ya en progreso" ...

(Por ejemplo, imagine que soy el solicitante en /programming/18368242/how-to-bypass-a-2tb-core-dump-file-system-limit y no quiero desperdiciar 5 -6 TB de espacio en disco :))

Mike G.
fuente
En Linux puede deshabilitar la generación de volcado de núcleo ... ¿podría ser una opción?
krisFR
No, los volcados de núcleo son necesarios en general, pero solo estamos buscando una forma de detenerlos en aquellos casos en los que sabemos cuál es el problema sin necesidad del núcleo, para ahorrar tiempo / espacio en disco / etc. Por supuesto, solo podemos eliminar el núcleo una vez que haya terminado de volcar (o incluso desvincularlo antes de eso), pero no hay razón para atar algunos gigas de espacio en el disco si pudiéramos matar el volcado del núcleo antes.
Mike G.
Posiblemente podría usar "cat / dev / null> <path_to_core>" en el script que llama al programa cuando se cumple una determinada condición, de modo que mientras exista la entrada / proc / <pid>, duerma cada pocos segundos y ejecute el / dev / copia nula al archivo central. Esto lo pondrá a cero. No estoy seguro del contexto completo detrás de la pregunta, pero esto puede funcionar.
Schrute
Schrute, eso tendría el mismo efecto que desvincular el núcleo, ¿no? El espacio en disco y los recursos del sistema aún se consumirían hasta que el núcleo termine de escribir; el tamaño del archivo simplemente no sería visible en du o ls.
Mike G.
Recursos sí, sin embargo, este es un método común para tratar con un archivo de gran tamaño como el núcleo / archivo de registro y no detener el PID. Solo depende de cuál es el objetivo.
Schrute

Respuestas:

8

En general: no, no hay forma de matar confiablemente un volcado de núcleo.

Dicho esto, existe una posibilidad (al menos en Linux) para comercial * NIX probablemente de ninguna manera

La posibilidad radica en el hecho de que la serie 3.x del núcleo puede interrumpir la escritura de archivos. Una posibilidad es encontrar el hilo que está haciendo el volcado y enviarle repetidamente SIGKILL hasta que tenga éxito.

Esta serie de parches soluciona el problema a cierto nivel.

Otra posibilidad es usar la sintaxis alternativa para coredump_pattern. El manual dice que desde 2.6.19 en lugar de un patrón, puede usar una tubería y un programa (con parámetros) que manejará el volcado. Ergo tendrá control sobre qué volcado se escribirá en dónde (/ dev / null es el candidato obvio para sus núcleos inútiles).

Este parche también merece un poco de atención: http://linux.derkeiler.com/Mailing-Lists/Kernel/2010-06/msg00918.html

zeridon
fuente
Gracias zeridon, esa es definitivamente la mejor respuesta hasta ahora.
Mike G.
Creo que si usa el mecanismo de tubería, puede salir sin leer los datos de la tubería si sabe que no es algo que desea conservar (a menos que una tubería rota cree otro problema ... necesitaría probar eso)
Alexis Wilke
0

mira este enlace, puede ser útil

https://publib.boulder.ibm.com/httpserv/ihsdiag/coredumps.html

Hamed Shahinnejad
fuente
Si bien esto puede responder teóricamente la pregunta, sería preferible incluir aquí las partes esenciales de la respuesta y proporcionar el enlace para referencia.
Tom O'Connor
Gracias Hamed, pero aunque ese enlace tiene mucha información interesante, no creo que responda a mi pregunta (a menos que me haya perdido, todavía no estoy tan despierto :))
Mike G.
-1

Parece que podría ejecutar ulimit -c (suponiendo que esté usando bash) para limitar el tamaño de volcado del núcleo.

Ver: /ubuntu/220905/how-to-remove-limit-on-core-dump-file-size

y

http://ss64.com/bash/ulimit.html

Kerry
fuente
1
Kerry, como dije en el OP, "Obviamente, si supiéramos de antemano que no queremos volcados del núcleo, podríamos configurar el ulimit apropiadamente o usar las diversas utilidades de control de archivos principales del sistema operativo". Estoy tratando de ver si hay una manera de detener un volcado de núcleo una vez que ya ha comenzado para una tarea muy grande (para ahorrar tiempo / espacio en disco / recursos).
Mike G.