man core
告诉我们:
将核心转储传送到程序
从内核 2.6.19 开始,Linux 支持该
/proc/sys/kernel/core_pattern
文件的替代语法 。如果此文件的第一个字符是管道符号 (|
),则该行的其余部分被解释为要执行的程序。核心转储不是写入磁盘文件,而是作为程序的标准输入提供。请注意以下几点:
必须使用绝对路径名(或相对于根目录的路径名 /)指定程序,并且必须紧跟在“|”之后 特点。
为运行程序而创建的进程以用户和组 root 身份运行。
命令行参数可以提供给程序(自 Linux 2.6.24 起),由空格分隔(最多 128 字节的总行长度)。
命令行参数可以包括上面列出的任何 % 说明符。例如,要传递正在转储的进程的 PID,请在参数中指定 %p。
你可以在那里放一个脚本,比如
| /path/to/myscript %p %s %c
Run Code Online (Sandbox Code Playgroud)
您可以检测哪个进程正在触发核心转储:( man core
):
%% a single % character
%p PID of dumped process
%u (numeric) real UID of dumped process
%g (numeric) real GID of dumped process
%s number of signal causing dump
%t time of dump, expressed as seconds since the Epoch, 1970-01-01
00:00:00 +0000 (UTC)
%h hostname (same as nodename returned by uname(2))
%e executable filename (without path prefix)
%E pathname of executable, with slashes ('/') replaced by exclama?
tion marks ('!').
%c core file size soft resource limit of crashing process (since
Linux 2.6.24)
Run Code Online (Sandbox Code Playgroud)
现在你所要做的就是为你自己的进程之外的其他进程“做默认的事情”