是否有一个钩子来确定核心文件生成完成

是否有一个钩子来确定核心文件生成完成

我如何确定core.<pid>文件生成开始/完成?

答案1

你可以放一个inotify在将包含核心文件的目录中进行监视。示范:

/tmp$ { ulimit -c unlimited; exec sleep 9999; } &
[1] 25646
/tmp$ kill -QUIT %1                              
[1]  + 25646 quit (core dumped)  { ulimit -c unlimited; exec sleep 9999; }

在另一个终端中:

$ inotifywait -e close_write /tmp
Setting up watches.
Watches established.
/tmp/ CLOSE_WRITE,CLOSE core

CLOSE_WRITE当核心文件完全写入时,会发出最后一行报告事件。

或者,Linux 允许您自定义核心文件的生成。这是系统范围的设置,需要 root 访问权限,因此它可能适合也可能不适合您的情况。您可以通过设置kernel.core_pattern读写控制指向将在标准输出上接收核心内容的程序。一个玩具程序可以是

#!/bin/sh
cat >"/var/cores/$1-$2-$3.core"
# Do whatever you want now that the core file has been written
echo "/var/cores/$1-$2-$3.core" | mail -s "$4 dumped core" denys

/usr/local/sbin/my_core_dumper,注册于

sysctl kernel.core_pattern='|/usr/local/sbin/my_core_dumper %t %P %e %E'

答案2

我不确定是否有“钩子”来确定这一点,但是,除非它是操作系统核心转储,否则它会立即完成。根据我的经验,当你看到核心文件时,它就完成了转储。如果转储核心或任何其他文件需要很长时间,我通常会在循环中以 5 秒的间隔检查文件大小,并且当它在 3 或 4 次迭代中没有增加时,我可以放心地假设它是完毕。

我知道这不是您正在寻找的,但在缺乏其他解决方案的情况下,这是一种实用的解决方法。

相关内容