技术解析

怎样避免一个进程被 killall 杀掉
0
2021-07-16 17:54:20
idczone
比如我现在同时运行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不在标准库,某些时候不便安装,
所以这种方法被我弃用了

还有什么便捷的方法么?
诚心求教
ln -s

忽略掉SIGTERM信号.

首先,你不应该 killall python……

如果你不想 killall ,你为什么要用 killall 呢

if(sys=win)
use 钩子,不过我不会,

就是二楼说的,忽略掉对应的信号就行了,

+1

sys=win ? sys == win

我试了下 这个方法,的确可以,不过 有的程序是用 脚本启动,使用软链 后还要修改脚本


这个方法我试下看看,不过不还清楚忽略SIGTERM后怎么终止程序
killall 可能是别人程序里执行的,所以不可控,才有了这个问题

忘了说明是 linux 系统


第N次犯了这个错误。。。总把=号吃了。多谢提醒

忽略 SIGTERM 之后你可以响应别的信号来结束自己,或者用其它方式,例如检测到某文件存在时结束自己,方法还是很多的。
但是,如果你不想被其他人 kill 掉,那么最简单的方法就是用一个不同的用户运行你的进程;这样一来就只有 root 才能 kill 掉你(如果对方都是 root 了,kill 不掉你的进程反而会觉得奇怪吧)。反正我觉得没有特别的理由而屏蔽 SIGTERM 是不明智的选择……

kill pid啊,killall本来就不适合你这样的场景。

我记得有两个信号是不可被丢弃,不可捕获,具体你看看,其他信号就可以通过sighandler来更改默认行为了




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

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服