怎么在 Python 进程收到 SIGTERM 信号时记录下发出信号的进程的 pid?

2019-07-18 22:11:16 +08:00
 zhuweiping

最近测试环境遇到个问题,用 Python 服务老是被 SIGTERM 信号终止了,已经基本排查了是服务自己把自己干掉了,所以想用 python signal 模块捕一下 SIGTERM 信号,但是还有找到能记录下 SIGTERM 信号来自哪个进程的方法,大家有没有做过类似的功能呀,求教。或者能另辟蹊径分析到 SIGTERM 来源的方法也欢迎赐教。 感谢。

2062 次点击
所在节点    Python
11 条回复
rrfeng
2019-07-18 22:20:11 +08:00
不能。不可能的。
neoblackcap
2019-07-18 22:36:14 +08:00
我记得 signal 模块也是很简单地封装一下系统信号处理的回调而已。
你这样的情况啊,用 bpftrace 试试看看?
corvofeng
2019-07-18 22:41:48 +08:00
你有看内核日志吗, 说不定被内核杀的
iPhoneXI
2019-07-18 22:42:08 +08:00
遇到过类似问题,某 C 扩展出现了 SIGSEGV,日志里就能发现了
iPhoneXI
2019-07-18 22:43:23 +08:00
看错了,SIGTERM 应该还不一样,忽略上一条
zhuweiping
2019-07-18 23:14:09 +08:00
@rrfeng 好的,感谢
zhuweiping
2019-07-18 23:15:52 +08:00
@neoblackcap 是的,signal 封得比较简易,我试一下你说的 bprtrace,感谢指教!
zhuweiping
2019-07-18 23:16:31 +08:00
@corvofeng 看过,没有线索😬
zhuweiping
2019-07-18 23:17:00 +08:00
@iPhoneXI 好的,感谢交流
LUXURISE
2019-07-27 20:39:34 +08:00
如果是用的 python3.3 及以上版本的话,可以使用 signal.sigwaitinfo
返回结果中包含 siginfo_t 这个数据结构,其中有 si_pid,si_uid 字段,分别为信号发出的 pid 和 用户 id
我简单测试了一下,可以拿到 pid
zhuweiping
2019-07-30 13:01:27 +08:00
@LUXURISE 感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/584244

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX