我的应用程序需要以特定模式生成核心文件。
我如何做到这一点,而不影响其他进程?
当/ proc是只读的时,我该怎么做?
man core
告诉我们:
管道核心转储到一个程序
从内核2.6.19开始,Linux支持
/proc/sys/kernel/core_pattern
文件的备用语法。 如果此文件的第一个字符是管道符号(|
),则该行的其余部分将被解释为要执行的程序。 核心转储不是写入磁盘文件,而是作为程序的标准输入。请注意以下几点:
程序必须使用绝对路径名(或相对于根目录的路径名/)来指定,并且必须紧跟在“|”之后。 字符。
运行程序创建的进程以用户和组的根目录运行。
命令行参数可以被提供给程序(从Linux 2.6.24开始),由空格(最多128行)组成。
命令行参数可以包含上面列出的任何%说明符。 例如,要传递正在转储的进程的PID,请在参数中指定%p。
你可以在那里放一个脚本,比如说
| /path/to/myscript %p %s %c
您可以检测哪个进程正在触发coredump:( 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)
现在你所要做的就是为自己以外的其他进程“做默认的事情”