lighthttpd 页面无法 pkill 掉 python 程序

2014-09-28 12:00:15 +08:00
 happywowwow
服务器用的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了。。。
2844 次点击
所在节点    Python
3 条回复
dant
2014-09-28 12:38:05 +08:00
程序运行时输出PID,结束时直接kill PID
VYSE
2014-09-28 13:18:38 +08:00
确定lighttpd不会切换到自己的权限账户?sh脚本加id > /tmp/id.tmp看看
happywowwow
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的现象了。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/136127

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX