Linux

Unix(或 Linux)中是否有機制來停止正在進行的核心轉儲?

  • March 17, 2022

假設一個(非常)大的程序正在崩潰並轉儲核心,我們從其他資訊(可能是斷言消息,也可能是其他資訊)中知道原因。

有沒有辦法阻止核心轉儲完全生成,因為在這種情況下這是一種浪費?

例如,核心轉儲程序的 kill -9 會中斷核心文件的生成嗎?

顯然,如果我們提前知道我們不想要核心轉儲,我們可以適當地設置 ulimit 或使用作業系統的各種核心文件控制實用程序。

但這個問題是關於“核心轉儲已經在進行中”階段……

(例如,假設我是 https://stackoverflow.com/questions/18368242/how-to-bypass-a-2tb-core-dump-file-system-limit中的請求者 並且不想浪費 5 -6 TB 的磁碟空間 :) )

一般來說:不,沒有辦法可靠地殺死核心轉儲。

話雖如此,商業 *NIX 有可能(至少在 linux 中)可能沒有辦法

可能性在於核心的3.x系列能夠中斷文件寫入。一種可能性是找到正在執行轉儲的執行緒並重複向它發送 SIGKILL 直到它成功。

這個更新檔系列在一定程度上修復了這個問題。

其他可能性是使用 coredump_pattern 的替代語法。該手冊說,從 2.6.19 開始,您可以使用管道和程序(帶有參數)來處理轉儲,而不是使用模式。因此,您將可以控制將哪個轉儲寫入何處(/dev/null 是您無用核心的明顯候選者)。

這個更新檔也值得關注: http: //linux.derkeiler.com/Mailing-Lists/Kernel/2010-06/msg00918.html

引用自:https://serverfault.com/questions/571333