Có một cơ chế trong Unix (hoặc Linux) để ngăn chặn kết xuất lõi đang tiến hành không?


15

Giả sử một quá trình (rất) lớn đang sụp đổ và đổ lõi, và chúng ta biết nguyên nhân từ các thông tin khác (có thể là một thông điệp khẳng định, có thể là một cái gì đó khác).

Có cách nào để ngăn chặn bãi rác lõi được tạo ra hoàn toàn, vì nó là một sự lãng phí trong trường hợp này?

Chẳng hạn, việc giết -9 của quá trình bán phá giá lõi có làm gián đoạn việc tạo ra corefile không?

Rõ ràng, nếu chúng ta biết trước rằng chúng ta không muốn các bãi rác cốt lõi, chúng ta có thể thiết lập ulimit một cách thích hợp hoặc sử dụng các tiện ích kiểm soát tệp lõi khác nhau của HĐH.

Nhưng câu hỏi này là về giai đoạn "bãi rác cốt lõi đang diễn ra" ...

(Ví dụ: hãy tưởng tượng tôi là người yêu cầu trong /programming/18368242/how-to-bypass-a-2tb-core-dump-file-system-limit và không muốn lãng phí 5 -6 TB không gian đĩa :))


Trên Linux, bạn có thể vô hiệu hóa kết xuất lõi được tạo ra ... nó có thể là một tùy chọn không?
krisFR

Không - nói chung các bãi lõi là cần thiết, nhưng chúng tôi chỉ tìm cách ngăn chặn chúng trong những trường hợp mà chúng tôi biết vấn đề là gì mà không cần lõi, để tiết kiệm thời gian / dung lượng đĩa / vv .... tất nhiên chúng ta chỉ có thể xóa lõi sau khi đã hoàn thành việc bán phá giá (hoặc thậm chí hủy liên kết nó trước đó), nhưng không có lý do gì để buộc một vài hợp đồng không gian trên đĩa nếu chúng ta có thể giết chết kết xuất lõi trước đó.
Mike G.

Bạn có thể có thể sử dụng "cat / dev / null> <path_to_core>" trong tập lệnh gọi chương trình khi một điều kiện nhất định được đáp ứng, miễn là mục / Proc / <pid> tồn tại, ngủ vài giây và chạy / dev / null sao chép vào tập tin cốt lõi. Điều này sẽ không nó ra. Tôi không chắc chắn về bối cảnh đầy đủ đằng sau câu hỏi, nhưng điều này có thể hoạt động.
Schrute

Schrute, điều đó sẽ có tác dụng tương tự như hủy liên kết lõi, phải không? Không gian đĩa và tài nguyên hệ thống vẫn sẽ được sử dụng cho đến khi lõi hoàn thành ghi - kích thước tệp sẽ không hiển thị trong du hoặc ls.
Mike G.

Tài nguyên có, tuy nhiên đây là một phương pháp phổ biến để xử lý một tệp lớn như tệp lõi / nhật ký và không dừng PID. Nó chỉ phụ thuộc vào mục tiêu là gì.
Schrute

Câu trả lời:


8

Nói chung: không, không có cách nào đáng tin cậy để giết chết một coredump.

Điều đó đang được nói có khả năng (ít nhất là trong linux) cho thương mại * NIX có lẽ không có cách nào

Khả năng nằm ở thực tế là chuỗi 3.x của kernel có thể làm gián đoạn việc ghi tập tin. Một khả năng là tìm ra chuỗi đang thực hiện việc bán phá giá và liên tục gửi SIGKILL cho nó cho đến khi nó thành công.

Loạt bản vá này khắc phục vấn đề ở một mức độ nào đó.

Khả năng khác là sử dụng cú pháp thay thế cho coredump_potype. Hướng dẫn nói rằng kể từ 2.6.19 thay vì mẫu, bạn có thể sử dụng đường ống và chương trình (có thông số) sẽ xử lý kết xuất. Ergo bạn sẽ có quyền kiểm soát kết xuất nào sẽ được ghi vào nơi (/ dev / null là ứng cử viên rõ ràng cho các lõi vô dụng của bạn).

Bản vá này cũng đáng được chú ý một chút: http://linux.derkeiler.com/Mailing-Lists/Kernel/2010-06/msg00918.html


Cảm ơn zeridon - đó chắc chắn là câu trả lời tốt nhất cho đến nay.
Mike G.

Tôi nghĩ rằng nếu bạn sử dụng cơ chế đường ống, bạn có thể thoát mà không cần đọc dữ liệu đường ống nếu bạn biết rằng không phải thứ gì đó bạn muốn giữ (trừ khi đường ống bị hỏng tạo ra một vấn đề khác ... sẽ cần phải kiểm tra điều đó.)
Alexis Wilke

0

kiểm tra liên kết này, nó có thể hữu ích

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


Trong khi về mặt lý thuyết có thể trả lời câu hỏi, tốt hơn là nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo.
Tom O'Connor

Cảm ơn Hamed, nhưng trong khi liên kết đó có nhiều thông tin thú vị, tôi không nghĩ nó trả lời câu hỏi của tôi (trừ khi tôi bỏ lỡ nó - Tôi vẫn chưa tỉnh táo :))
Mike G.

-1

Có vẻ như bạn có thể chạy ulimit -c (giả sử bạn đang sử dụng bash) để giới hạn kích thước kết xuất lõi.

Xem: https://askubfox.com/questions/220905/how-to-remove-limit-on-core-dump-file-size

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


1
Kerry, như tôi đã nói trong OP, "Rõ ràng, nếu chúng ta biết trước rằng chúng ta không muốn các bãi rác cốt lõi, chúng ta có thể thiết lập ulimit một cách thích hợp hoặc sử dụng các tiện ích kiểm soát tệp lõi khác nhau của HĐH." Tôi đang cố gắng xem liệu có cách nào để ngăn chặn một bãi rác cốt lõi hay không khi nó đã bắt đầu cho một nhiệm vụ rất lớn (để tiết kiệm thời gian / không gian đĩa / tài nguyên).
Mike G.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.