我的应用程序要求以特定模式生成核心文件。
如何在不影响其他流程的情况下执行此操作?
如果/ proc是只读的,我该怎么做?
答案 0 :(得分:3)
man core
告诉我们:
将核心转储管道插入程序
从内核2.6.19开始,Linux支持替代语法
/proc/sys/kernel/core_pattern
个文件。如果是第一个字符 file是管道符号(|
),然后该行的其余部分是 解释为要执行的程序。而不是被写入 磁盘文件,核心转储作为程序的标准输入。请注意以下几点:
必须使用绝对路径名(或a)指定程序 相对于根目录的路径名,/),必须立即 按照'|'字符。
为运行程序而创建的进程以用户和组的形式运行 根
可以向程序提供命令行参数(因为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)
现在你所要做的就是“为你自己的
以外的其他进程做”默认事情“