如何仅为特定应用程序更改核心模式?

Thi*_*vel 7 unix linux core

我的应用程序需要以特定模式生成核心文件。

如何在不影响其他进程的情况下执行此操作?

当 /proc 为只读时,我该怎么做?

seh*_*ehe 5

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)

现在你所要做的就是为你自己的进程之外的其他进程“做默认的事情”