![是否有一个钩子来确定核心文件生成完成](https://linux22.com/image/81116/%E6%98%AF%E5%90%A6%E6%9C%89%E4%B8%80%E4%B8%AA%E9%92%A9%E5%AD%90%E6%9D%A5%E7%A1%AE%E5%AE%9A%E6%A0%B8%E5%BF%83%E6%96%87%E4%BB%B6%E7%94%9F%E6%88%90%E5%AE%8C%E6%88%90.png)
我如何确定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 次迭代中没有增加时,我可以放心地假设它是完毕。
我知道这不是您正在寻找的,但在缺乏其他解决方案的情况下,这是一种实用的解决方法。