Esiste un meccanismo in Unix (o Linux) per fermare un dump core in corso?


15

Diciamo che un processo (molto) grande sta andando in crash e scarica core, e conosciamo la causa da altre informazioni (forse un messaggio di asserzione, forse qualcos'altro).

C'è un modo per impedire che la discarica principale venga completamente generata, poiché in questo caso è uno spreco?

Ad esempio, ucciderebbe -9 di un processo di dumping core interromperebbe la generazione del corefile?

Ovviamente, se sapessimo in anticipo che non desideriamo i dump principali, potremmo impostare l'ulimit in modo appropriato o utilizzare le varie utility di controllo dei file core del sistema operativo.

Ma questa domanda riguarda la fase "core dump già in corso" ...

(Ad esempio, immagina di essere il richiedente in /programming/18368242/how-to-bypass-a-2tb-core-dump-file-system-limit e non voglio sprecare 5 -6 TB di spazio su disco :))


Su Linux è possibile disabilitare la generazione di core dump ... potrebbe essere un'opzione?
KrisFR

No - i core dump sono necessari in generale, ma stiamo solo cercando un modo per fermarli in quei casi in cui sappiamo qual è il problema senza bisogno del core, per risparmiare tempo / spazio su disco / ecc .... Di Ovviamente possiamo semplicemente eliminare il core una volta che ha finito il dumping (o anche scollegarlo prima), ma non c'è motivo di legare qualche giga di spazio sul disco se potessimo semplicemente uccidere il dump del core in precedenza.
Mike G.

Puoi eventualmente usare "cat / dev / null> <path_to_core>" nello script che chiama il programma quando viene soddisfatta una certa condizione, quindi finché esiste la voce / proc / <pid>, dormi ogni pochi secondi ed esegui il / dev / null copia nel file core. Questo lo azzererà. Non sono sicuro dell'intero contesto alla base della domanda, ma questo può funzionare.
Schrute,

Schrute, avrebbe lo stesso effetto di scollegare il core, no? Lo spazio su disco e le risorse di sistema verrebbero comunque consumati fino a quando il core non avrà finito di scrivere - le dimensioni del file non sarebbero visibili in du o ls.
Mike G.

Risorse sì, tuttavia questo è un metodo comune per gestire un file di grandi dimensioni come file core / log e non interrompere il PID. Dipende solo da quale sia l'obiettivo.
Schrute,

Risposte:


8

Generalmente: no, non c'è modo di uccidere in modo affidabile un coredump.

Detto questo, esiste una possibilità (almeno in linux) per un * NIX commerciale probabilmente no

La possibilità sta nel fatto che la serie 3.x del kernel è in grado di interrompere la scrittura dei file. Una possibilità è trovare il thread che sta eseguendo il dumping e inviargli ripetutamente SIGKILL fino a quando non riesce.

Questa serie di patch risolve il problema a un certo livello.

Un'altra possibilità è utilizzare la sintassi alternativa per coredump_pattern. Il manuale dice che dal 2.6.19 invece di un modello è possibile utilizzare una pipe e un programma (con parametri) che gestirà il dump. Ergo avrai il controllo su quale dump verrà scritto dove (/ dev / null è il candidato ovvio per i tuoi core inutili).

Questa patch merita anche un po 'di attenzione: http://linux.derkeiler.com/Mailing-Lists/Kernel/2010-06/msg00918.html


Grazie zeridon - questa è sicuramente la risposta migliore finora.
Mike G.

Penserei che se usi il meccanismo delle tubazioni puoi semplicemente uscire senza leggere i dati della pipa se sai che non qualcosa che vuoi mantenere (a meno che una tubatura rotta crei un altro problema ... avrebbe bisogno di provarlo)
Alexis Wilke

0

controlla questo link, può essere utile

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


Sebbene ciò possa teoricamente rispondere alla domanda, sarebbe preferibile includere qui le parti essenziali della risposta e fornire il collegamento come riferimento.
Tom O'Connor,

Grazie Hamed, ma anche se quel link ha molte informazioni interessanti, non penso che risponda alla mia domanda (a meno che non mi sia perso - non sono ancora così sveglio :))
Mike G.

-1

Sembra che tu possa eseguire ulimit -c (supponendo che stai usando bash) per limitare la dimensione del dump del core.

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

e

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


1
Kerry, come ho detto nel PO, "Ovviamente, se sapessimo in anticipo che non vogliamo dump core, potremmo impostare l'ulimit in modo appropriato o utilizzare le varie utility di controllo dei file core del sistema operativo." Sto cercando di vedere se c'è un modo per fermare un dump principale una volta che è già iniziato per un'attività molto grande (per risparmiare tempo / spazio su disco / risorse).
Mike G.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.