V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
zhuweiping
V2EX  ›  Python

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

  •  
  •   zhuweiping · 2019-07-18 22:11:16 +08:00 · 2087 次点击
    这是一个创建于 1982 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    11 条回复    2019-07-30 13:01:27 +08:00
    rrfeng
        1
    rrfeng  
       2019-07-18 22:20:11 +08:00 via Android
    不能。不可能的。
    neoblackcap
        2
    neoblackcap  
       2019-07-18 22:36:14 +08:00
    我记得 signal 模块也是很简单地封装一下系统信号处理的回调而已。
    你这样的情况啊,用 bpftrace 试试看看?
    corvofeng
        3
    corvofeng  
       2019-07-18 22:41:48 +08:00 via Android
    你有看内核日志吗, 说不定被内核杀的
    iPhoneXI
        4
    iPhoneXI  
       2019-07-18 22:42:08 +08:00 via Android
    遇到过类似问题,某 C 扩展出现了 SIGSEGV,日志里就能发现了
    iPhoneXI
        5
    iPhoneXI  
       2019-07-18 22:43:23 +08:00 via Android
    看错了,SIGTERM 应该还不一样,忽略上一条
    zhuweiping
        6
    zhuweiping  
    OP
       2019-07-18 23:14:09 +08:00 via Android
    @rrfeng 好的,感谢
    zhuweiping
        7
    zhuweiping  
    OP
       2019-07-18 23:15:52 +08:00 via Android
    @neoblackcap 是的,signal 封得比较简易,我试一下你说的 bprtrace,感谢指教!
    zhuweiping
        8
    zhuweiping  
    OP
       2019-07-18 23:16:31 +08:00 via Android
    @corvofeng 看过,没有线索😬
    zhuweiping
        9
    zhuweiping  
    OP
       2019-07-18 23:17:00 +08:00 via Android
    @iPhoneXI 好的,感谢交流
    LUXURISE
        10
    LUXURISE  
       2019-07-27 20:39:34 +08:00
    如果是用的 python3.3 及以上版本的话,可以使用 signal.sigwaitinfo
    返回结果中包含 siginfo_t 这个数据结构,其中有 si_pid,si_uid 字段,分别为信号发出的 pid 和 用户 id
    我简单测试了一下,可以拿到 pid
    zhuweiping
        11
    zhuweiping  
    OP
       2019-07-30 13:01:27 +08:00 via Android
    @LUXURISE 感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1730 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 16:31 · PVG 00:31 · LAX 08:31 · JFK 11:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.