Gibt es in Unix (oder Linux) einen Mechanismus, um einen laufenden Core-Dump zu stoppen?

15

Nehmen wir an, ein (sehr) großer Prozess stürzt ab und stürzt den Kern ab, und wir kennen die Ursache aus anderen Informationen (möglicherweise eine Bestätigungsnachricht, möglicherweise etwas anderes).

Gibt es eine Möglichkeit zu verhindern, dass der Core Dump vollständig generiert wird, da es in diesem Fall eine Verschwendung ist?

Würde beispielsweise das Beenden von -9 eines Core-Dump-Prozesses die Generierung von Corefiles unterbrechen?

Wenn wir im Voraus wüssten, dass wir keine Core-Dumps wollen, könnten wir das ulimit natürlich entsprechend einstellen oder die verschiedenen Core-Dienstprogramme des Betriebssystems zur Dateisteuerung verwenden.

Bei dieser Frage geht es jedoch um die Phase "Core Dump bereits in Bearbeitung" ...

(Stellen Sie sich zum Beispiel vor, ich bin der Anforderer in /programming/18368242/how-to-bypass-a-2tb-core-dump-file-system-limit und möchte keine 5 verschwenden -6 TB Festplattenspeicher :))

Mike G.
quelle
Unter Linux können Sie die Generierung von Core-Dumps deaktivieren. Könnte dies eine Option sein?
krisFR
Nein - die Core-Dumps sind im Allgemeinen notwendig, aber wir suchen nur nach einer Möglichkeit, sie in den Fällen zu stoppen, in denen wir das Problem kennen, ohne den Core zu benötigen, um Zeit / Speicherplatz / usw. zu sparen Natürlich können wir den Core einfach löschen, sobald er entleert ist (oder ihn sogar vorher entkoppeln), aber es gibt keinen Grund, ein paar Gigs Speicherplatz auf der Festplatte zu belegen, wenn wir den Core-Dump einfach früher beenden könnten.
Mike G.
Sie könnten möglicherweise "cat / dev / null> <path_to_core>" in dem Skript verwenden, das das Programm aufruft, wenn eine bestimmte Bedingung erfüllt ist. Solange der Eintrag / proc / <pid> vorhanden ist, sollten Sie alle paar Sekunden schlafen und das / ausführen. dev / null in die Core-Datei kopieren. Dies wird es auf Null setzen. Ich bin mir nicht sicher, in welchem ​​Zusammenhang die Frage steht, aber das kann funktionieren.
Schrute
Schrute, das hätte den gleichen Effekt wie das Lösen des Kerns, nicht wahr? Der Speicherplatz und die Systemressourcen würden noch verbraucht, bis der Kern den Schreibvorgang beendet hat - die Dateigröße wäre in du oder ls einfach nicht sichtbar.
Mike G.
Ressourcen ja, dies ist jedoch eine übliche Methode, um mit großen Dateien wie Core / Log-Dateien umzugehen und die PID nicht zu stoppen. Es kommt nur darauf an, was das Ziel ist.
Schrute

Antworten:

8

Generell gilt: Nein, es gibt keine Möglichkeit, einen Coredump zuverlässig zu töten.

Davon abgesehen gibt es eine Möglichkeit (zumindest unter Linux) für kommerzielles * NIX wahrscheinlich auf keinen Fall

Die Möglichkeit besteht darin, dass die 3.x-Serie des Kernels das Schreiben von Dateien unterbrechen kann. Eine Möglichkeit besteht darin, den Thread zu finden, der den Dump ausführt, und wiederholt SIGKILL an ihn zu senden, bis er erfolgreich ist.

Diese Patch-Serie behebt das Problem bis zu einem gewissen Grad.

Eine andere Möglichkeit besteht darin, die alternative Syntax für das coredump_pattern zu verwenden. Das Handbuch besagt, dass Sie seit 2.6.19 anstelle eines Musters eine Pipe und ein Programm (mit Parametern) verwenden können, das den Dump behandelt. Ergo haben Sie die Kontrolle, welcher Dump wohin geschrieben wird (/ dev / null ist der offensichtliche Kandidat für Ihre nutzlosen Kerne).

Dieser Patch verdient auch ein wenig Aufmerksamkeit: http://linux.derkeiler.com/Mailing-Lists/Kernel/2010-06/msg00918.html

Zeridon
quelle
Danke zeridon - das ist definitiv die beste Antwort bisher.
Mike G.
Ich würde denken, wenn Sie den Rohrleitungsmechanismus verwenden, können Sie einfach beenden, ohne die Rohrleitungsdaten zu lesen, wenn Sie wissen, dass Sie etwas nicht behalten möchten (es sei denn, ein gebrochenes Rohr schafft ein anderes Problem ... müsste das testen.)
Alexis Wilke
0

Check diesen Link aus, er kann hilfreich sein

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

Hamed Shahinnejad
quelle
Während dies theoretisch die Frage beantworten mag, wäre es vorzuziehen , die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen.
Tom O'Connor
Danke Hamed, aber obwohl dieser Link viele interessante Informationen enthält, kann ich meine Frage nicht beantworten (es sei denn, ich habe es verpasst - ich bin noch nicht ganz wach :))
Mike G.
-1

Es sieht so aus, als könnten Sie ulimit -c ausführen (vorausgesetzt, Sie verwenden bash), um die Speicherauszugsgröße zu begrenzen.

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

und

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

Kerry
quelle
1
Kerry, wie ich im OP sagte: "Wenn wir im Voraus wüssten, dass wir keine Core-Dumps wollen, könnten wir das ulimit entsprechend einstellen oder die verschiedenen Core-Dienstprogramme des Betriebssystems zur Dateisteuerung verwenden." Ich versuche herauszufinden, ob es eine Möglichkeit gibt, einen Core-Dump zu stoppen, wenn er bereits für eine sehr große Aufgabe begonnen hat (um Zeit, Speicherplatz und Ressourcen zu sparen).
Mike G.