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

2014-05-03 19:23:11 +08:00
 scola
比如我现在同时运行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不在标准库,某些时候不便安装,
所以这种方法被我弃用了

还有什么便捷的方法么?
诚心求教
5203 次点击
所在节点    Linux
14 条回复
lwjef
2014-05-03 19:31:14 +08:00
ln -s
Ever
2014-05-03 19:41:48 +08:00
忽略掉SIGTERM信号.
dorentus
2014-05-03 20:23:30 +08:00
首先,你不应该 killall python……
jsonline
2014-05-03 20:32:32 +08:00
如果你不想 killall ,你为什么要用 killall 呢
dong3580
2014-05-03 20:33:45 +08:00
if(sys=win)
use 钩子,不过我不会,
leyle
2014-05-03 20:51:26 +08:00
就是二楼说的,忽略掉对应的信号就行了,
jprovim
2014-05-04 00:21:59 +08:00
@Ever +1
xdeng
2014-05-04 08:55:49 +08:00
@dong3580 sys=win ? sys == win
scola
2014-05-04 10:24:14 +08:00
@lwjef 我试了下 这个方法,的确可以,不过 有的程序是用 脚本启动,使用软链 后还要修改脚本


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

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

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

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

@jprovim

谢谢二楼的方法,试了下忽略SIGTERM的确是可行了

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

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

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

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

© 2021 V2EX