首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
V2EX  ›  Linux

进程无法杀死是什么原因, Running 状态的

  •  
  •   plko345 · 240 天前 · 2398 次点击
    这是一个创建于 240 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 开发的机器上有人跑了个 python 任务, 他没有把任务跑在后台
    • 然后 ssh 连接断开, 但这程序并没有终止
    • 他是用他自己的用户起的, 没有使用 sudo
    • 我用 root 用户 kill -9 就是毫无反应
    • strace 也没有追踪不到这个进程的任何信息
    • 父进程是 1
    23 回复  |  直到 2019-03-29 20:38:47 +08:00
        1
    plko345   240 天前
    忘记说了, 是 ubuntu 16.04 64bit
        2
    wellsc   240 天前
    孤儿进程
        3
    pkokp8   240 天前 via Android
    是不是进入了某些系统中断,所以你无法 kill
        4
    choury   240 天前 via Android
    cat /proc/xxx/stack
        5
    weyou   240 天前 via Android
    进程被 system call 阻塞了,除此之外还没见过-9 kill 不掉的处于 running 状态的用户进程。
        6
    plko345   240 天前
    @choury 这个我看过, 但没发现什么信息, 可以指点下吗?
        7
    wunonglin   240 天前
    @wellsc 哈哈哈哈哈哈哈哈哈哈哈哈 h'h'h'h
        8
    a663   240 天前 via Android
    进程是 D 状态了吧?
        9
    plko345   240 天前
    @a663 是 R 状态, 这才是我觉得诡异的地方
        10
    plko345   240 天前
    @a663 而且进程吃了一个 CPU 核心的资源
        11
    mango88   240 天前
    @wellsc 优秀
        12
    wellsc   240 天前   ♥ 3
    @wunonglin 笑啥。。我有说错什么了么?
        13
    yuikns   240 天前 via iPhone
    linux 里面的 signal 体系都是接收者处理的。你发送 sigkill 后,目标进程在收到 sig 后自行了断。

    没有反应有两种可能,一种是程序自定义了 sigkill 的行为,一种是 cpu 一直在忙,可能死循环了。

    前者把同事撸起来打一顿重启服务器,后者你试试等两天看它会不会消失,有时候会,不然重启服务器吧
        14
    zorn   240 天前
    有守护进程?
        15
    yuikns   240 天前 via iPhone
    python 的线程稀烂,结果各种库都使用多进程。弄到现在搞成这样也是常见
        16
    yuikns   240 天前 via iPhone
    @zorn 可能是多进程,挂起后子进程变孤儿
        17
    wwqgtxx   240 天前   ♥ 1
    @yuikns 我记得按照 Linux 规范,程序并不允许自己处理 SIGKILL 信号,内核会直接接管,你说的收到 sig 自行了断的是 SIGTREM
        18
    yuikns   240 天前
    @wwqgtxx 感谢指教

    https://en.wikipedia.org/wiki/Signal_(IPC)#SIGKILL

    > In contrast to SIGTERM and SIGINT, this signal cannot be caught or ignored

    学习了。稍微程序试了下,的确不行。平时做 gracefully shutdown 特意只屏蔽了 SIGHUP, SIGINT, SIGTERM 和 SIGQUIT 就想留着 SIGKILL 给脸着地用的。没想到其实也不被允许这样做。

    因此我第一种猜想显然是脑补错误的。

    关于 “自行了断”,应该是我表述问题。我记得&理解是这样的。通常情况下,所有信号是异步的,我们发送 sigkill, kernel 把它丢进了 q,然后对应进程结束回收资源。通常情况下,它会在若干时间片里面就处理完毕。但是例外也是有的。普通的用户进程是可以随便打断的,但是涉及到 kernel 的调用有时候不行。如果有些 kernel 级别的调用在很短周期内反复使用,或者一直调用不成功,抽不出时间片处理信号,目标的回收就会被延时。

    以前有时候遇到有些 python 用户,挂了 100 多 G 数据在内存,意外死了。执行 kill 不成功,但是有其它程序在跑又不太好直接重启。于是就等上两天,它自己抽出空就能消失。
        19
    linbiaye   239 天前
    sigkill 这个信号 os 是会直接杀死进程,而不是通知进程。进程如果 D 住了则无效,楼主这个更像是遇到 BUG。
        20
    aa514758835   239 天前
    杀他父亲 进程
        21
    ps1aniuge   237 天前
    1 哈哈哈哈哈哈哈哈哈哈哈哈。一个 run 状态的,非 root 用户启动的,进程,kill -9 杀不死。
    哈哈哈哈哈哈哈哈哈哈哈哈。应该存在么?我认为不应该。
    这样的一个 win 进程,应该存在吗?我认为不应该。

    2 如何解决:
    除非内存耗尽了,但一般不可能。
    vmstat 看看。等半小时还没 kill -9 掉,就应该重启机子,若暂时不能重启,就等空闲重启。

    3 为什么:
    内核 bug,或 glibc 等 bug。所以你要升级 linux 发行版到 ubuntu 16.04.6,并升级内核到最新。

    4 若还能重现问题。那就是这个 linux 太垃圾!
    就只能不用这种 linux。或者直接修改源码,直接找厂家。

    5 上面的观点 4,有人不同意么?
    普通用户可以运行 1024 个进程,
    不用 1024,几个流氓 py 进程,坐在你 linux 家里大吃二喝不给钱,怎么弄也不走,
    你找来警察,警察 kill 来了也不灵。
    很容易就可以把你的 linux 家 “塞满,涨死”,对不?

    你只能找盖 linux 房子的创世神,毁灭房子。彻底重设计 。
    不重设计,只是重盖,刚盖好,流氓又钻进来“坐吃”了。
        22
    ps1aniuge   237 天前
    就是 root 启动的进程,就算是进入了某些中断,也应该能 kill -9 掉!

    另外,是否还有人认为,linux 可以 n 年不补丁?不用重启?
        23
    Yapie   230 天前
    即有可能是一个 service,而且是自动重启的那种。
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1082 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 23ms · UTC 19:07 · PVG 03:07 · LAX 11:07 · JFK 14:07
    ♥ Do have faith in what you're doing.