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

怎样避免一个进程被 killall 杀掉

  •  
  •   scola · 2014-05-03 19:23:11 +08:00 · 5298 次点击
    这是一个创建于 3888 天前的主题,其中的信息可能已经有所发展或是发生改变。
    比如我现在同时运行3个python脚本

    python a.py
    python b.py
    python c.py
    现在如果killall python,肯定3个脚本都终止,
    如果我想python c.py 这个进程被保护起来,不被killall python杀掉
    有什么方法呢?

    目前我考虑的使用https://github.com/simplegeo/setproctitle
    这个python lib来rename 进程的name 避免被杀,
    因为这个lib不在标准库,某些时候不便安装,
    所以这种方法被我弃用了

    还有什么便捷的方法么?
    诚心求教
    第 1 条附言  ·  2014-05-04 16:43:55 +08:00
    谢谢一楼 和 所有回复的V友

    最终还是用了一楼的方法,最轻便
    14 条回复    2014-05-28 21:23:09 +08:00
    lwjef
        1
    lwjef  
       2014-05-03 19:31:14 +08:00   ❤️ 1
    ln -s
    Ever
        2
    Ever  
       2014-05-03 19:41:48 +08:00   ❤️ 4
    忽略掉SIGTERM信号.
    dorentus
        3
    dorentus  
       2014-05-03 20:23:30 +08:00
    首先,你不应该 killall python……
    jsonline
        4
    jsonline  
       2014-05-03 20:32:32 +08:00 via Android
    如果你不想 killall ,你为什么要用 killall 呢
    dong3580
        5
    dong3580  
       2014-05-03 20:33:45 +08:00
    if(sys=win)
    use 钩子,不过我不会,
    leyle
        6
    leyle  
       2014-05-03 20:51:26 +08:00 via Android
    就是二楼说的,忽略掉对应的信号就行了,
    jprovim
        7
    jprovim  
       2014-05-04 00:21:59 +08:00
    @Ever +1
    xdeng
        8
    xdeng  
       2014-05-04 08:55:49 +08:00
    @dong3580 sys=win ? sys == win
    scola
        9
    scola  
    OP
       2014-05-04 10:24:14 +08:00
    @lwjef 我试了下 这个方法,的确可以,不过 有的程序是用 脚本启动,使用软链 后还要修改脚本


    @Ever
    @leyle 这个方法我试下看看,不过不还清楚忽略SIGTERM后怎么终止程序

    @dorentus killall 可能是别人程序里执行的,所以不可控,才有了这个问题

    @dong3580
    @xdeng 忘了说明是 linux 系统
    dong3580
        10
    dong3580  
       2014-05-04 10:31:23 +08:00 via iPhone
    @xdeng
    第N次犯了这个错误。。。总把=号吃了。多谢提醒
    dorentus
        11
    dorentus  
       2014-05-04 11:06:49 +08:00
    忽略 SIGTERM 之后你可以响应别的信号来结束自己,或者用其它方式,例如检测到某文件存在时结束自己,方法还是很多的。

    但是,如果你不想被其他人 kill 掉,那么最简单的方法就是用一个不同的用户运行你的进程;这样一来就只有 root 才能 kill 掉你(如果对方都是 root 了,kill 不掉你的进程反而会觉得奇怪吧)。反正我觉得没有特别的理由而屏蔽 SIGTERM 是不明智的选择……
    sdysj
        12
    sdysj  
       2014-05-04 11:43:29 +08:00
    kill pid啊,killall本来就不适合你这样的场景。
    leyle
        13
    leyle  
       2014-05-04 12:51:11 +08:00 via Android
    我记得有两个信号是不可被丢弃,不可捕获,具体你看看,其他信号就可以通过sighandler来更改默认行为了
    scola
        14
    scola  
    OP
       2014-05-28 21:23:09 +08:00
    @Ever
    @leyle
    @dorentus

    @jprovim

    谢谢二楼的方法,试了下忽略SIGTERM的确是可行了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1164 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:27 · PVG 02:27 · LAX 10:27 · JFK 13:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.