Linux下多线程进程的信号SIGTERM处理

2023-12-31

我在Linux下调试一个多线程进程的信号处理时,发现了一种奇怪的现象。这个问题的一句话是“SIGTERM handler为空并且已成功注册到系统,但进程启动时仍可能被SIGTERM杀死”。

详细说明如下:

  • 该进程由父进程派生,并由execve
  • 处理假操作

    void sighdr(int sig) {      
        Trace();  
    }     
    main() {     
        sigaction(); // Register SIGTERM handler  
        prog_init(); // Very complex operation, read/write UNIX socket, 
                     // starting new thread, and so on. The whole   operation 
                     // will take almost 12 seconds.     
        prog_loop(); // loop of main thread 
    }
    
  • 如果信号 SIGTERM 在此过程中触发prog_init()手术

    The sighdr()会被kernel调用,trace文件可以记录相关信息就OK了。但随后该过程停止了。由于第二个线程的代码量很大,所以我无法定位最后一条指令。而极少数情况下(1/60),进程不会被停止,但运行状态不正确,被挂起recvmsg()Linux 的prog_loop()永远不会被执行。

  • 如果信号 SIGTERM 被触发prog_loop()

    该过程运行良好,SIGTERM 将被忽略。

  • 运行后,/proc/pid/status

线程:2
信号Q:0/124393
签名号:0000000000000000
电话号码:0000000000000000
信号块:0000000000000000
签名:0000000000000005
信号号:0000000180005000

所以我的问题是:
1)出现这种现象有什么可能的原因吗?
2)是否有任何调试方法来查找进程发生了什么?我尝试过 valgrind,但没有发现有价值的东西。


None

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

Linux下多线程进程的信号SIGTERM处理 的相关文章

  • 模板类的不明确多重继承

    我有一个真实的情况 可以总结为以下示例 template lt typename ListenerType gt struct Notifier void add listener ListenerType struct TimeListe
  • 嵌入式系统中的malloc [重复]

    这个问题在这里已经有答案了 我正在使用嵌入式系统 该应用程序在 AT91SAMxxxx 和 cortex m3 lpc17xxx 上运行 我正在研究动态内存分配 因为它会极大地改变应用程序的外观 并给我更多的力量 我认为我唯一真正的路线是为
  • SSH 主机密钥指纹与模式 C# WinSCP 不匹配

    我尝试通过 WinSCP 使用 C 连接到 FTPS 服务器 但收到此错误 SSH 主机密钥指纹 与模式不匹配 经过大量研究 我相信这与密钥的长度有关 当使用 服务器和协议信息 下的界面进行连接时 我从 WinSCP 获得的密钥是xx xx
  • 如何在我的应用程序中使用 Windows Key

    Like Windows Key E Opens a new Explorer Window And Windows Key R Displays the Run command 如何在应用程序的 KeyDown 事件中使用 Windows
  • 为什么禁止在 constexpr 函数中使用 goto?

    C 14 对你能做什么和不能做什么有规则constexpr功能 其中一些 没有asm 没有静态变量 看起来相当合理 但标准也不允许goto in constexpr功能 即使它允许其他控制流机制 这种区别背后的原因是什么 我以为我们已经过去
  • 如何在 WPF RichTextBox 中跟踪 TextPointer?

    我正在尝试了解 WPF RichTextBox 中的 TextPointer 类 我希望能够跟踪它们 以便我可以将信息与文本中的区域相关联 我目前正在使用一个非常简单的示例来尝试弄清楚发生了什么 在 PreviewKeyDown 事件中 我
  • 使用 Google Analytics API 在 C# 中显示信息

    我一整天都在寻找一个好的解决方案 但谷歌发展得太快了 我找不到有效的解决方案 我想做的是 我有一个 Web 应用程序 它有一个管理部分 用户需要登录才能查看信息 在本节中 我想显示来自 GA 的一些数据 例如某些特定网址的综合浏览量 因为我
  • c 中的错误:声明隐藏了全局范围内的变量

    当我尝试编译以下代码时 我收到此错误消息 错误 声明隐藏了全局范围内的变量 无效迭代器 节点 根 我不明白我到底在哪里隐藏或隐藏了之前声明的全局变量 我怎样才能解决这个问题 typedef node typedef struct node
  • WPF 从主线程以外的其他线程截屏

    我有一个线程用于侦听 WPF 应用程序的命令 如果 WPF 应用程序收到截取屏幕截图的命令 则任务将移交给 screenshotService 我在互联网上的某个地方找到了一些代码来截取屏幕截图 似乎可以工作 但我还没有想清楚 我无法从另一
  • 如何在 Team Foundation 上强制发表有意义的签入评论?

    我有一个开发团队有一个坏习惯 他们写道poor签入评论 当我们必须在团队基础上查看文件的历史记录时 这使得它成为一场噩梦 我已经启用了变更集评论政策 这样他们甚至可以在签到时留下评论 否则他们不会 我们就团队的工作质量进行了一些讨论 他们很
  • 使用 LINQ 查找列表中特定类型的第一个元素

    使用 LINQ 和 C 在元素列表中查找特定类型的第一个项目的最短表示法是什么 var first yourCollection OfType
  • 是否有比 lex/flex 更好(更现代)的工具来生成 C++ 分词器?

    我最近将源文件解析添加到现有工具中 该工具从复杂的命令行参数生成输出文件 命令行参数变得如此复杂 以至于我们开始允许它们作为一个文件提供 该文件被解析为一个非常大的命令行 但语法仍然很尴尬 因此我添加了使用更合理的语法解析源文件的功能 我使
  • Windows 10 中 Qt 桌面应用程序的缩放不当

    我正在为 Windows 10 编写一个简单的 Qt Widgets Gui 应用程序 我使用的是 Qt 5 6 0 beta 版本 我遇到的问题是它根本无法缩放到我的 Surfacebook 的屏幕上 这有点难以判断 因为 SO 缩放了图
  • .NET 选项将视频文件流式传输为网络摄像头图像

    我有兴趣开发一个应用程序 它允许我从 xml 构建视频列表 包含视频标题 持续时间等 并将该列表作为我的网络摄像头流播放 这意味着 如果我要访问 ustream tv 或在实时通讯软件上激活我的网络摄像头 我的视频播放列表将注册为我的活动网
  • char指针或char变量的默认值是什么[重复]

    这个问题在这里已经有答案了 下面是我尝试打印 char 变量和指针的默认值 值的代码 但无法在控制台上看到它 它是否有默认值或只是无法读取 ASCII 范围 include
  • 如何在内存中存储分子?

    我想将分子存储在内存中 这些可以是简单的分子 Methane CH4 C H bond length 108 7 pm H H angle 109 degrees But also more complex molecules like p
  • Bing 地图运行时错误 Windows 8.1

    当我运行带有 Bing Map 集成的 Windows 8 1 应用程序时 出现以下错误 Windows UI Xaml Markup XamlParseException 类型的异常 发生在 DistanceApp exe 中 但未在用户
  • 窗体最大化时自动缩放子控件

    有没有办法在最大化屏幕或更改分辨率时使 Windows 窗体上的所有内容自动缩放 我发现手动缩放它是正确的 但是当切换分辨率时我每次都必须更改它 this AutoScaleDimensions new System Drawing Siz
  • 如何使用 ReactiveList 以便在添加新项目时更新 UI

    我正在创建一个带有列表的 Xamarin Forms 应用程序 itemSource 是一个reactiveList 但是 向列表添加新项目不会更新 UI 这样做的正确方法是什么 列表定义 listView new ListView var
  • 如何将字符串“07:35”(HH:MM) 转换为 TimeSpan

    我想知道是否有办法将 24 小时时间格式的字符串转换为 TimeSpan 现在我有一种 旧时尚风格 string stringTime 07 35 string values stringTime Split TimeSpan ts new

随机推荐

  • Win32 消息框不出现

    我遇到了一个奇怪的问题 我正在 VC 2008 中制作一个 Win32 应用程序 制作一个类来封装大部分工作 以便在调用时轻松重复MessageBox 消息框已创建 我认为 但除非我按 Alt 键 否则不会显示 到底发生了什么 我运行程序
  • 添加%20而不是空格

    我想这是一个小问题 但我不得不在这里问 因为我的项目不够了 当我将字符串传递给另一个控制器中的函数时 它将空格更改为 20 符号 我猜控制器认为字符串作为 url 传递并对其进行编码 但我不知道如何删除它 或者如果可能的话不要让它将空格更改
  • 如何使用 .aspx 文件检查服务器上运行的 ASP .NET MVC 版本?

    例如 对于 NET 版本 我用以下方法解决 The NET version is 但是 ASP NET MVC 版本又如何呢 提前致谢 typeof Controller Assembly GetName Version
  • 为什么 getchar() 在 scanf() 之后不等我按 Enter 键?

    我正在学习 C 我正在使用 getchar 来停止命令窗口 这样我就可以看到正在进行的练习 但它不起作用 这是一个示例 include
  • 修改函数内的列表

    假设我有带有列表参数的函数 并且在其主体内我想通过将数组的元素复制到列表来修改传递的列表 def function1 list arg a function2 function2 returns an array of numbers li
  • 重叠图像与图像贴图相互遮挡

    信息 图像具有大的透明部分 因此每个图像都必须重叠才能创建所需的效果 具体来说 每个图像的可点击部分都是奇怪的梯形形状 意味着相互挤压 图像的图像映射的大部分与其他附近 梯形 图像的透明部分重叠 我不认为 z 索引的任何改变能解决这个问题
  • Git 标签发布版本?

    预发布版本可以通过紧跟在补丁版本后面附加破折号和一系列点分隔的标识符来表示 示例 1 0 0 alpha 1 0 0 alpha 1 1 0 0 0 3 7 1 0 0 x 7 z 92 semver org http semver org
  • 仅提交存储库根目录上的属性更改,而不是文件

    我有一个 SVN 存储库 其中包含未提交的文件更改 根文件夹上的 svn externals 属性也发生了变化 如何提交属性更改 而不提交对文件本身的更改 为了仅提交在命令行上指定的显式路径 请使用 depth empty选项例如在具有新修
  • Django 按两个字段对项目进行排序,但如果它们为零则忽略它们

    我有以下模型 为了解决这个问题而大大简化 class Product models Model price models DecimalField max digits 8 decimal places 2 sale price model
  • WindowBuilder 无法显示 GUI。无法加载组件 javax.swing.JFrame 的 *.wbp-component.xml 描述

    我使用的是 Eclipse 2021 9 版本 并且已经安装了 windowbuilder 当我单击设计器选项卡时会发生此错误 有谁能够帮助我 我遇到了同样的问题 我刚刚更新了 WindowBuilder Nightly Build 1 9
  • 如何在SASS中将整数转换为十六进制

    代替类似的东西地图数据结构 http chriseppstein github ioChris Eppstein 提到 SASS 正在进行的工作 我正在尝试实现类似的目标 将字符串映射到相应的十六进制值 该值将用于指定 CSS 的 unic
  • 如何在 Spring Boot 2.0 中注册自定义环境后处理器?

    我按照这个中的确切步骤进行操作文档 https docs spring io spring boot docs 1 5 x SNAPSHOT reference htmlsingle boot features application ev
  • IE8 中的 Jquery 问题

    Jquery 在 Safari 和 Firefox 中运行良好 在 IE8 中 使用开发人员工具 我收到错误 无法获取位置属性 无效参数 jquery 1 3 2 js 第 12 行字符 12949 通过调试 脚本突出显示字符 J G K
  • Kubernetes 配置:在代码存储库上与在 helm 图表存储库上

    Helm 被宣传为 管理 k8s 上应用程序部署的方式 我们的微服务具有代码存储库和可部署的 1 对 1 映射 我发现将 k8s 配置映射与代码一起使用要方便得多 以便它们一起发展 例如为功能标志添加新的环境变量时 然而 我们维护的是一个
  • Asp.net Core 自定义过滤器实现 IActionModelConvention 和 IFilterFactory

    我需要创建一个实现两者的自定义操作过滤器IActionModelConvention and IFilterFactory I use IActionModelConvention用于同时设置多条路线 我使用IFilterFactory注入
  • Java中忽略大小写

    我想知道如何使用户输入的任何内容在我的方法中忽略大小写 public static void findPatient if myPatientList getNumPatients 0 System out println No patie
  • 需要使用 Android 模拟器进行身份验证的代理

    有没有人设法让 Android 模拟器在需要身份验证的代理后面工作 我尝试将 http proxy 参数设置为 http DOMAIN USERNAME PASSWORD IP PORT 但我没有成功 我尝试按照文档进行操作 但没有成功 我
  • docker image ubuntu:16.04 似乎省略了 logrotate 的一些文件

    我根据以下内容构建了一个图像ubuntu 16 04 在构建图像时 我确实运行了一些命令 包括apt get y update 然后 我浏览图像docker run it myimage bash我发现有一些遗漏的文件logrotate在那
  • 使用 open cv Mat::at 时出现段错误

    我试图用一些值填充 opencv 矩阵 但我不断出现段错误 代码如下 Mat mask gx in window size in window size image type for int i 0 i lt in window size
  • Linux下多线程进程的信号SIGTERM处理

    我在Linux下调试一个多线程进程的信号处理时 发现了一种奇怪的现象 这个问题的一句话是 SIGTERM handler为空并且已成功注册到系统 但进程启动时仍可能被SIGTERM杀死 详细说明如下 该进程由父进程派生 并由execve 处