Apakah ada mekanisme di Unix (atau Linux) untuk menghentikan dump inti yang sedang dalam proses?

15

Katakanlah (sangat) proses besar adalah crash dan dumping core, dan kita tahu penyebabnya dari informasi lain (mungkin pesan yang tegas, mungkin sesuatu yang lain).

Apakah ada cara untuk menghentikan pembuangan inti agar tidak sepenuhnya dihasilkan, karena ini merupakan pemborosan dalam kasus ini?

Sebagai contoh, akankah membunuh -9 dari proses dumping inti mengganggu generasi corefile?

Jelas, jika kita tahu sebelumnya bahwa kita tidak ingin dump inti, kita dapat mengatur ulimit dengan tepat atau menggunakan berbagai utilitas kontrol file inti OS.

Tapi pertanyaan ini adalah tentang tahap "dump inti sudah dalam proses" ...

(Misalnya, bayangkan saya adalah pemohon di /programming/18368242/how-to-bypass-a-2tb-core-dump-file-system-limit dan tidak ingin membuang 5 -6 TB ruang disk :))

Mike G.
sumber
Di Linux Anda dapat menonaktifkan core dump agar tidak dihasilkan ... mungkinkah ini menjadi opsi?
krisFR
Tidak - core dump diperlukan secara umum, tetapi kami hanya mencari cara untuk menghentikannya dalam kasus-kasus tersebut di mana kami tahu apa masalahnya tanpa perlu core, untuk menghemat waktu / ruang disk / dll. Dari tentu saja kita bisa menghapus inti begitu selesai melakukan dumping (atau bahkan memutuskan tautannya sebelumnya), tetapi tidak ada alasan untuk mengikat beberapa ruang pada disk jika kita bisa membunuh core dump tadi.
Mike G.
Anda mungkin dapat menggunakan "cat / dev / null> <path_to_core>" dalam skrip yang memanggil program ketika kondisi tertentu terpenuhi, sehingga selama entri / proc / <pid> ada, tidur setiap beberapa detik dan jalankan / dev / null salin ke file inti. Ini akan nol itu. Saya tidak yakin konteks penuh di balik pertanyaan, tetapi ini bisa berhasil.
Schrute
Schrute, itu akan memiliki efek yang sama dengan memutus tautan inti, bukan? Ruang disk dan sumber daya sistem masih akan dikonsumsi sampai inti selesai menulis - ukuran file tidak akan terlihat dalam du atau ls.
Mike G.
Sumber daya ya, namun ini adalah metode umum untuk menangani file besar seperti file inti / log dan tidak menghentikan PID. Itu hanya tergantung pada apa tujuannya.
Schrute

Jawaban:

8

Secara umum: tidak, tidak ada cara untuk dapat dipercaya membunuh coredump.

Itu dikatakan ada kemungkinan (setidaknya di linux) untuk komersial * NIX mungkin tidak ada cara

Kemungkinannya terletak pada kenyataan bahwa seri 3.x dari kernel dapat mengganggu penulisan file. Satu kemungkinan adalah menemukan utas yang melakukan dumping dan berulang kali mengirim SIGKILL ke sana sampai berhasil.

Ini seri Patch memperbaiki masalah ini ke beberapa tingkat.

Kemungkinan lain adalah dengan menggunakan sintaks alternatif untuk coredump_pattern. Manual mengatakan bahwa sejak 2.6.19 alih-alih pola, Anda dapat menggunakan pipa dan program (dengan params) yang akan menangani dump. Ergo Anda akan memiliki kontrol dump yang akan ditulis ke mana (/ dev / null menjadi kandidat yang jelas untuk core tidak berguna Anda).

Patch ini juga patut mendapat perhatian: http://linux.derkeiler.com/Mailing-Lists/Kernel/2010-06/msg00918.html

zeridon
sumber
Terima kasih zeridon - itu pasti jawaban terbaik sejauh ini.
Mike G.
Saya akan berpikir bahwa jika Anda menggunakan mekanisme perpipaan Anda bisa berhenti tanpa membaca data pipa jika Anda tahu bahwa bukan sesuatu yang ingin Anda pertahankan (kecuali jika pipa yang rusak menciptakan masalah lain ... perlu mengujinya.)
Alexis Wilke
0

lihat tautan ini, mungkin ini bisa membantu

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

Hamed Shahinnejad
sumber
Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
Tom O'Connor
Terima kasih Hamed, tetapi sementara tautan itu memang memiliki banyak info menarik, saya tidak berpikir itu menjawab pertanyaan saya (kecuali saya melewatkannya - saya belum bangun :))
Mike G.
-1

Sepertinya Anda bisa menjalankan ulimit -c (dengan asumsi Anda menggunakan bash) untuk membatasi ukuran inti dump.

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

dan

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

Kerry
sumber
1
Kerry, seperti yang saya katakan di OP, "Jelas, jika kita tahu sebelumnya bahwa kita tidak ingin dump inti, kita dapat mengatur ulimit dengan tepat atau menggunakan berbagai utilitas kontrol file inti OS." Saya mencoba untuk melihat apakah ada cara untuk menghentikan dump inti setelah sudah mulai untuk tugas yang sangat besar (untuk menghemat waktu / ruang disk / sumber daya).
Mike G.