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