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
happywowwow
V2EX  ›  Python

lighthttpd 页面无法 pkill 掉 python 程序

  •  
  •   happywowwow · 2014-09-28 12:00:15 +08:00 · 2922 次点击
    这是一个创建于 3708 天前的主题,其中的信息可能已经有所发展或是发生改变。
    服务器用的lighthttpd,简化起来说吧
    用户点击一个按钮,触发后台启用一个sh脚本,sh脚本写了
    /sbin/initctl stop monit &> /dev/null
    /bin/kill -9 $(pidof AAA) &> /dev/null
    /bin/kill -9 $(pidof BBB) &> /dev/null
    /bin/kill -9 $(pidof CCC) &> /dev/null
    /usr/bin/pkill python &> /dev/null
    /usr/bin/pkill python &> /dev/null
    /bin/kill -2 $(pidof python3) &> /dev/null
    /bin/kill -2 $(pidof python3) &> /dev/null
    /bin/kill -9 $(pidof python3) &> /dev/null
    /bin/kill -9 $(pidof python3) &> /dev/null

    其中,AAA BBB CCC是C编译的程序。
    python3 在后台启动了两个脚本,假设是python3 DDD.py 和 python3 EEE.py

    几点情况
    1、后台所有程序都是root权限启动,lighthttpd也是,包括python3的两个脚本和三个C编译的程序。
    2、AAA BBB CCC可以被杀掉,两个python3程序无法被杀掉。上面的脚本我写了各种kill来尝试
    3、DDD.py 用了多线程threading模块,还有一些就是 zmq time socket re json urllib

    请教这是什么原因? 真的不知道该如何kill了。。。
    3 条回复    2014-09-28 16:31:14 +08:00
    dant
        1
    dant  
       2014-09-28 12:38:05 +08:00 via iPhone   ❤️ 1
    程序运行时输出PID,结束时直接kill PID
    VYSE
        2
    VYSE  
       2014-09-28 13:18:38 +08:00   ❤️ 1
    确定lighttpd不会切换到自己的权限账户?sh脚本加id > /tmp/id.tmp看看
    happywowwow
        3
    happywowwow  
    OP
       2014-09-28 16:31:14 +08:00
    @dant
    @VYSE
    一起感谢你们两位,首先是觉得 “程序运行时输出PID,结束时直接kill PID” 肯定是可以的
    之后想查看id > /tmp/id.tmp 是不是这个问题。然后发现id.tmp 死活没有输出
    因为sh里也是调用了函数的,可是函数明明能杀程序,不能输出id,就算是echo一点东西也不行


    我说的有点稀里糊涂,但最终原因是一个sh程序里面没有另外一个sh程序的path,然后每次执行另外那个sh的时候,其实是没有执行过的。
    但是C编译的程序还是被重启了,这个原因是由于.so文件被覆盖,被迫结束掉了。。。然后我设置了监控程序monit又让这几个C程序重新启动了。恩我这里的sh是用来更新的,所以会有文件的解压,覆盖等操作...
    而python...当然没有.so引用了。。。
    结果就是被蒙蔽了双眼,发现C编译的程序可以被kill,而python不能被kill的现象了。。。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2770 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 02:40 · PVG 10:40 · LAX 18:40 · JFK 21:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.