windows 下怎么保护 Python 的进程不被关闭?

2017-01-17 15:43:24 +08:00
 cyrbuzz
现在用的方法是 在主进程中 创建一个监控进程。如果主进程被关了就执行一段代码。
同样主进程中也一直检测 监控进程,如果监控进程被关了就执行相同的一段代码。

但是如果同时将两个进程关了就不行了。用 taskkill 命令可以轻松的同时关闭两个进程。

想将某个 python 进程不能被关闭,各种搜素没找到合适的方法。
或者有没有什么可以让监控进行下去的办法?

还请各位指点一二。
5078 次点击
所在节点    Python
22 条回复
holyzhou
2017-01-17 16:12:05 +08:00
再添条计划任务呢
wwqgtxx
2017-01-17 16:46:49 +08:00
查 win32 api ,有个应用层禁止访问的选项,不过这种方式很耍流氓,基本上只有安全软件用才是合理的
cyrbuzz
2017-01-17 17:05:13 +08:00
@holyzhou 某些精简版的系统好像没有启动"计划"服务,在没有这个服务里启动不了啊。
cyrbuzz
2017-01-17 17:08:00 +08:00
@wwqgtxx 能否详细说一下呢, win32api 太多了,用 CreateRemoteThread 尝试注入到一个系统进程里安全软件会爆木马。。
enenaaa
2017-01-17 17:18:03 +08:00
1. 提升程序权限, 让一般程序不能操作。
2. 在驱动层拦截相关 API 操作。

以上都不能保证程序不被关闭, 没有最流氓只有更流氓。
herozhang
2017-01-17 17:19:46 +08:00
检测杀进程的进程,抢先杀掉对方
noobsheldon
2017-01-17 17:20:12 +08:00
werkzeug 的_reloader 模块中监视文件修改的,并自动重新运行的方法你看下。不知道能不能用
phrack
2017-01-17 17:52:17 +08:00
这个和 python 没有关系。

提权,驱动等都可以。

这样的需求正常程序就不该实现,很明显是要强奸用户了吧。
cyrbuzz
2017-01-17 17:59:41 +08:00
@phrack 没啊,我是怕进程被用这种手段关闭。比如说一个计费进程,被恶意关闭了。。
cyrbuzz
2017-01-17 18:00:50 +08:00
@noobsheldon 这好像是 web 服务器的工具包?我试了试没找到要怎么用能详细说说吗,谢谢。
cyrbuzz
2017-01-17 18:01:55 +08:00
@enenaaa @herozhang 谢谢,朝这个方向研究研究。
lany
2017-01-17 18:02:01 +08:00
SSDT
zhibin
2017-01-17 18:16:17 +08:00
lany
2017-01-17 18:26:56 +08:00
不过也可以用注册表 obRegiestercallback
morethansean
2017-01-17 18:30:51 +08:00
@cyrbuzz 计费进程还不好办……要么心跳要么主程序检测不到计费程序直接退出不就好了?
0x01f
2017-01-17 18:30:52 +08:00
没驱动的话没办法解决,分分钟关掉。趁早放弃做计费的想法,或者加驱动。
cyrbuzz
2017-01-17 18:33:23 +08:00
@morethansean 主程序被关了一样没办法。。
morethansean
2017-01-17 18:37:18 +08:00
@cyrbuzz 我的意思是,如果是一个软件在使用过程中要收费的,那么这个软件在运行过程中检测收费进程还在不在不就好了,软件都被关了本来也不应该计费了啊……主要是不太清楚你的需求到底是咋样的……所以只能猜测……
cyrbuzz
2017-01-17 18:53:08 +08:00
@morethansean 这...就像网吧里的计费一样,在没有服务端时,我如果把网吧里的计费进程关了可我还是能用电脑啊。(网管来揍人不算。)
noobsheldon
2017-01-17 20:26:32 +08:00
@cyrbuzz
def restart_with_reloader(self):
"""Spawn a new Python interpreter with the same arguments as this one,
but running the reloader thread.
"""
while 1:
_log('info', ' * Restarting with %s' % self.name)
args = [sys.executable] + sys.argv
new_environ = os.environ.copy()
new_environ['WERKZEUG_RUN_MAIN'] = 'true'

# a weird bug on windows. sometimes unicode strings end up in the
# environment and subprocess.call does not like this, encode them
# to latin1 and continue.
if os.name == 'nt' and PY2:
for key, value in iteritems(new_environ):
if isinstance(value, text_type):
new_environ[key] = value.encode('iso-8859-1')

exit_code = subprocess.call(args, env=new_environ,
close_fds=False)
if exit_code != 3:
return exit_code
类似于这个 while 循环里面的,利用 subprocess.call 打开另一个解释器。

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

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

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

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

© 2021 V2EX