核心转储文件名使用 core_pattern %e.%p.core 获取线程名称而不是可执行文件名称

2023-11-25

我最近开始使用 pthread_setname_np() 在我的应用程序中设置一些线程名称。执行此操作后,如果指定线程之一内发生崩溃,则核心转储文件名将获取线程名称,而不是 core_pattern %e.%p.core 的可执行文件名称

根据核心手册页, core_pattern 中的 %e 标志应该扩展为可执行文件名称。它没有说明任何有关线程名称的信息。

我想要可执行文件名称而不是线程名称,因为我有其他自动化脚本(不是由我维护)依赖于以应用程序名称开头的核心文件名。

这是 pthread_setname_np() 或 core_pattern 中的错误吗?

我正在 Linux CentOS 6.7 上运行。


因此,我通过将核心转储传输到 Python 脚本来解决这个问题,然后根据线程名称正则表达式模式到可执行文件名称的硬编码映射来重命名核心文件名。

以下是将核心通过管道传输到脚本的方法:

/sbin/sysctl -q -w "kernel.core_pattern=|/opt/mydirectory/bin/core_helper.py --corefile /opt/mydirectory/coredumps/%e.%p.core"
/sbin/sysctl -q -w "kernel.core_pipe_limit=8"

这是 core_helper.py 中的一个类的片段。作为奖励,如果您为核心文件名提供 .gz 扩展名,它将使用 gzip 压缩核心转储。

class CoredumpHelperConfig:
    def __init__(self, corefile):
        self.corefile = corefile

    # Work-around: Linux is putting the thread name into the 
    # core filename instead of the executable. Revert the thread name to 
    # executable name by using this mapping.
    # The order is important -- the first match will be used. 
    threadNameToExecutableMapping = [# pattern       , replace
                                      (r'fooThread.*', r'foo'),
                                      (r'barThread.*', r'foo'),
                                    ]

    def processCore(self):
        (dirname, basename) = os.path.split(self.corefile)
        # E.g. fooThread0.21495.core (no compression) or fooThread0.21495.core.gz (compression requested)
        match = re.match(r'^(\w+)\.(\d+)\.(core(\.gz)?)$', basename)
        assert match
        (threadName, pid, ext, compression) = match.groups()
        # Work-around for thread name problem
        execName = threadName
        for (pattern, replace) in CoredumpHelperConfig.threadNameToExecutableMapping:
            match = re.match(pattern, threadName)
            if match:
                execName = re.sub(pattern, replace, threadName)
                break
        self.corefile = os.path.join(dirname, '.'.join([execName, pid, ext]))
        # Pipe the contents of the core into corefile, optionally compressing it
        core = open(self.corefile, 'w')
        coreProcessApp = "tee"
        if(compression):
            coreProcessApp = "gzip"
        p = subprocess.Popen(coreProcessApp, shell=True, stdin=sys.stdin, stdout=core, stderr=core)
        core.close()
        return True

我将把它作为练习留给读者如何编写文件的其余部分。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

核心转储文件名使用 core_pattern %e.%p.core 获取线程名称而不是可执行文件名称 的相关文章

  • 使用 AWK 或 SED 以及以下标签以逗号分隔

    使用 AWK 或 SED 以及下面使用的标签以逗号分隔 BEGIN AccountID BEGIN CallerID BEGIN Billed Account Attributes 1111111 1111111 1111111 END B
  • 启动jetty服务器时出现NoClassDefFoundError

    我正在尝试在码头服务器中托管我的网络应用程序 spring 我将 war 文件复制到 jetty 服务器中的 webapp 文件夹中 我并不是想嵌入jetty服务器 而是试图在jetty内托管应用程序 如tomcat 我没有安装jetty
  • SSL 和 Tkinter 不存在于 Python 3.5.2、Debian Linux 的源代码构建中

    我刚刚将 Python 3 5 2 下载到我的 Debian 机器上并使用以下命令构建它 configure make make test sudo make install 一切正常 但在make test输出中 它显示安装程序由于未安装
  • Linux 缓冲区溢出环境变量

    我一直在审查不同类型的缓冲区溢出 并遇到了一个我不记得为什么会发生的问题 下面的代码是我尝试执行缓冲区溢出的程序 include
  • /etc/php5/conf.d 文件夹中的 .ini 文件有什么用?

    我知道 ini 文件位于 etc php5 cli与 PHP 的 CLI 使用有关 文件位于 etc php5 fpm是关于 PHP 的 FastCGI FPM 方面 但是位于以下位置的 ini 文件又如何呢 etc php5 conf d
  • 内核如何区分线程和进程

    Linux 中的线程被称为轻量级进程 无论是进程还是线程 它们的实现都是通过task struct数据结构 1 gt 那么 从这个意义上说 内核如何区分线程和进程 2 gt 当发生上下文切换时 线程如何在上下文切换中获得更少的开销 因为在此
  • 如何永久清除 linux/ubuntu 终端或 bash 中的所有历史记录? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 当您在 Linux 终端中使用向上键时 可以再次使用之前的命令 很棒的功能 但是 我开始使用命令中的敏感详细信息将 mysql 记录到 mysql 中
  • Linux 中不使用 C++ 的 C 异常处理

    Linux 是否提供了 C 语言的异常处理而不求助于 C 或者 实现此类异常处理的最佳方法是什么 目标是避免检查每个调用的函数的返回码 而是执行类似于 C 的线程安全且易于移植的操作 您可以通过为其编写信号处理程序来处理信号 GNU 记录的
  • 从命令输出中设置 GDB 中的环境变量

    我试图在挑战中利用缓冲区溢出 缓冲区从环境变量中获取其值 在 GDB 中 我知道您可以使用以下命令设置环境变量 set environment username test 但是我需要传递用户名变量特殊字符 所以我需要执行以下操作 set e
  • 如何在Linux中打开端口[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我已经安装了 Web 应用程序 该应用程序在 RHEL centOS 上的端口 8080 上运行 我只能通过命令行访问该机器 我尝试从我的
  • 配置错误:无法链接到 boost_system

    我正在尝试在 Debian 上安装一个软件包 足球模拟器 2d 当我进入目录并运行时 configure 我得到以下信息 reza debian soccer rcssserver 15 0 1 configure checking for
  • GCC 4.7 字符串文字的源字符编码和执行字符编码?

    Linux x86 64 上的 GCC 4 7 是否具有默认字符编码 用于验证和解码 C 源文件中字符串文字的内容 这是可配置的吗 此外 当将字符串数据从字符串文字链接到输出的数据部分时 它是否具有默认的执行字符编码 这是可配置的吗 在任何
  • 每个进程是否都存在内核堆栈?

    每个用户空间进程是否都存在一个内核堆栈和一个用户空间堆栈 如果两个堆栈都存在 那么每个用户空间进程应该有 2 个堆栈指针 对吗 在 Linux 中 每个任务 用户空间或内核线程 都有一个 8kb 或 4kb 的内核堆栈 具体取决于内核配置
  • 在类中使用静态互斥体

    我有一个可以有很多实例的类 它在内部创建并初始化来自第三方库 使用一些全局变量 的一些成员 并且不是线程安全的 我考虑过使用 static boost mutex 它将被锁定在我的类构造函数和析构函数中 因此 在我的线程中创建和销毁实例对于
  • 安全地记住 bash 脚本中的 ssh 凭据[重复]

    这个问题在这里已经有答案了 假设我有一个 bash 脚本 它通过 ssh 在远程计算机上执行命令 Do something here ssh otheruser host command1 Do something else ssh oth
  • 远程 ssh 命令:第一个回显输出丢失

    我试图通过 ssh 1 liner 调用在远程机器上运行多个命令 方法是将它们指定为传递给 bash c 的分号分隔字符串 它适用于某些情况 但不适用于其他情况 看一下这个 Note the echo 1 output is lost ba
  • Web 本地应用程序 Apache:运行 shell 脚本

    我开发了一个 shell 脚本 我想用它创建一个 UI 我决定使用带有本地服务器的 Web 界面 因为我对 HTML PHP 的了解很少 比 QT 或 Java 的了解更多 我只是希望我的 html 可以在我的计算机上运行 shell 脚本
  • Linux 源代码中的哪个位置会识别特定的 USB 设备?

    我有一个特定的 USB 设备 我想检查其 Linux 驱动程序源代码 我的理解是 USB 驱动程序执行的第一步是注册自己能够处理具有特定供应商 ID 和产品 ID 的设备 就我而言 供应商 ID 是0BDA产品 ID 是8187 有了这些信
  • MYSQL插入GB大小的巨大SQL文件

    我正在尝试创建 Wikipedia DB 副本 大约 50GB 但在处理最大的 SQL 文件时遇到问题 我使用 linux split 实用程序将 GB 大小的文件拆分为 300 MB 的块 例如 split d l 50 enwiki 2
  • 从命名管道读取

    我必须实现一个 打印服务器 我有 1 个客户端文件和 1 个服务器文件 include

随机推荐

  • 如何根据特殊条件进行分组

    目前 当我发出此 SQL 时 它会获取不同的用户名 我有一些不同的用户名 它们代表组 例如GRP BSN 我想将所有其他用户名 恰好是数字 分组到一个组中 例如GRP OTHERS select username count from ho
  • 连接到 SoftHSM java

    Code String pkcs11cfg pkcs11 cfg Provider p new SunPKCS11 pkcs11cfg Security addProvider p KeyStore ks KeyStore getInsta
  • 如何在 Angular cli 6.0.1 中创建 Angular 5 项目

    My 角度 cli 版本是 6 0 1 and node版本是8 11 1 如何创建或添加 Angular 5 的新项目 如果我使用ng 新的 项目名称 然后该项目正在下载角6 我也偶然发现了这个场景 这是我的解决方案 不幸的是 我们受到
  • 找出 Windows 的安装语言为

    我遇到一个问题 用户设置的区域设置 德语 与安装的语言 Windows 英语 不同 有没有办法发现安装的 Windows 语言与用户设置的区域设置 我应该注意的问题是我正在创建共享 并且根据区域设置设置权限 因此如果用户将区域设置设置为德语
  • LFSR 实现中的高效位调整

    虽然我有一个很好的 LSFR C 实现 但我想我会在 Haskell 中尝试同样的方法 只是看看它是如何进行的 到目前为止 我的想法比 C 实现慢两个数量级 这就引出了一个问题 如何提高性能 显然 位调整操作是瓶颈 分析器也证实了这一点 这
  • 如何在 Node Js 应用程序的多个实例之间同步对象

    Node JS 应用程序中是否有任何对象可以锁定 是否有多个应用程序实例可用 某些功能不应并发运行 如果实例 A 功能完成 它应该解锁该对象 密钥或某些标识符 并且应用程序的 B 实例应该检查其解锁是否应该运行某些功能 任何对象或密钥都可以
  • 通过 BinaryReader 将字节数组解压缩为字符串会产生空字符串

    我正在尝试解压缩字节数组并使用二进制读取器将其转换为字符串 当执行以下代码时 inStream 位置从 0 更改为数组的长度 但 str 始终是空字符串 BinaryReader br null string str String Empt
  • JavaScript 方括号函数调用

    当我浏览 jQuery 源代码时 我遇到了这一行 jQuery this state show hide 相比之下有什么优势吗 state jQuery this show jQuery this hide 独立示例 var object
  • Google App Engine 和 Google Compute Engine 有什么区别?

    我想知道 App Engine 与 Compute Engine 之间有什么区别 谁能向我解释其中的区别吗 应用引擎是一个平台即服务 这意味着您只需部署代码 平台就会为您完成其他所有事情 例如 如果您的应用程序非常成功 App Engine
  • 可变参数模板递归返回类型推导编译错误

    为什么下面的代码不能编译 template
  • 为什么 fclose 会挂起/死锁? (视窗)

    我有一个目录更改监视器进程 它从一组目录中的文件读取更新 我有另一个进程 可以对这些目录中的大量文件执行少量写入 测试程序 想象一下大约 100 个目录 每个目录有 10 个文件 每秒修改大约 500 个文件 运行一段时间后 目录监视器进程
  • “错误:‘myfn’声明为返回函数的函数”是什么意思?

    我正在尝试编写一个返回函数指针的函数 这是我的最小示例 void myfn int Doesn t work supposed to be a function called myfn that returns a pointer to a
  • 使用 THREE.Frustum 计算近/远平面顶点

    我需要一些帮助来处理 THREE Frustum 对象 我的问题 我需要计算近 远平面顶点 我已经看过这些教程 http www lighthouse3d com tutorials view frustum culling view fr
  • 使用php在谷歌云存储桶中创建文件夹

    我对谷歌云存储非常陌生 我想使用 php 编码在存储桶中创建文件夹 我搜索了很多网站 在 1 上我看到它是这样写的 在存储桶内创建文件夹将创建一个以目录命名的占位符对象 没有数据内容和 mimetype application x dire
  • 如何在 Flutter WebView 中将数据发布到 URL

    我想将一些数据发布到 Flutter WebView 中的 URL 主体 那么 我该怎么做呢 webview flutter目前没有发送帖子请求的方法 不过 你可以试试我的flutter inappwebview插入 它支持POST请求 使
  • Vue.js - 在 v-for 中使用过滤器

    我有一个简单的 Vue 过滤器 它将数组的长度限制为 n 个元素 像这样使用它效果很好 array limitArray 2 现在我想在里面使用它v for循环 像这样 li li 但这会引发错误 如何在内部使用过滤器v for 编辑 可能
  • like 子句 JPQL 中的参数

    我正在尝试使用 like 子句编写 JPQL 查询 LIKE code 我想要 code 4 并找到 455 554 646 我无法通过 code value namedQuery setParameter this value 因为在另一
  • Android studio git 使用私钥

    A 有一个 git 仓库的地址 我还有一个 open ssh 格式的私钥 Android Studio中的git可以使用吗 我尝试搜索一些信息 但目前没有运气 感谢您提供任何有用的信息 Edit My steps 1 I put my pr
  • Bing图片搜索分页-无限滚动

    当你在Bing搜索引擎上搜索图片时 结果显示如下 http www bing com images search q stack overflow 请注意 您如何不断滚动并滚动 并且没有 正常 分页 我的问题是 他们是如何做到这一点的 我可
  • 核心转储文件名使用 core_pattern %e.%p.core 获取线程名称而不是可执行文件名称

    我最近开始使用 pthread setname np 在我的应用程序中设置一些线程名称 执行此操作后 如果指定线程之一内发生崩溃 则核心转储文件名将获取线程名称 而不是 core pattern e p core 的可执行文件名称 根据核心