最近测试环境遇到个问题,用 Python 服务老是被 SIGTERM 信号终止了,已经基本排查了是服务自己把自己干掉了,所以想用 python signal 模块捕一下 SIGTERM 信号,但是还有找到能记录下 SIGTERM 信号来自哪个进程的方法,大家有没有做过类似的功能呀,求教。或者能另辟蹊径分析到 SIGTERM 来源的方法也欢迎赐教。 感谢。
1
rrfeng 2019-07-18 22:20:11 +08:00 via Android
不能。不可能的。
|
2
neoblackcap 2019-07-18 22:36:14 +08:00
我记得 signal 模块也是很简单地封装一下系统信号处理的回调而已。
你这样的情况啊,用 bpftrace 试试看看? |
3
corvofeng 2019-07-18 22:41:48 +08:00 via Android
你有看内核日志吗, 说不定被内核杀的
|
4
iPhoneXI 2019-07-18 22:42:08 +08:00 via Android
遇到过类似问题,某 C 扩展出现了 SIGSEGV,日志里就能发现了
|
5
iPhoneXI 2019-07-18 22:43:23 +08:00 via Android
看错了,SIGTERM 应该还不一样,忽略上一条
|
6
zhuweiping OP @rrfeng 好的,感谢
|
7
zhuweiping OP @neoblackcap 是的,signal 封得比较简易,我试一下你说的 bprtrace,感谢指教!
|
8
zhuweiping OP @corvofeng 看过,没有线索😬
|
9
zhuweiping OP @iPhoneXI 好的,感谢交流
|
10
LUXURISE 2019-07-27 20:39:34 +08:00
如果是用的 python3.3 及以上版本的话,可以使用 signal.sigwaitinfo
返回结果中包含 siginfo_t 这个数据结构,其中有 si_pid,si_uid 字段,分别为信号发出的 pid 和 用户 id 我简单测试了一下,可以拿到 pid |
11
zhuweiping OP @LUXURISE 感谢
|