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

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

  •  
  •   cyrbuzz ·
    HuberTRoy · 2017-01-17 15:43:24 +08:00 · 5117 次点击
    这是一个创建于 2902 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在用的方法是 在主进程中 创建一个监控进程。如果主进程被关了就执行一段代码。
    同样主进程中也一直检测 监控进程,如果监控进程被关了就执行相同的一段代码。

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

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

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

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

    提权,驱动等都可以。

    这样的需求正常程序就不该实现,很明显是要强奸用户了吧。
    cyrbuzz
        9
    cyrbuzz  
    OP
       2017-01-17 17:59:41 +08:00
    @phrack 没啊,我是怕进程被用这种手段关闭。比如说一个计费进程,被恶意关闭了。。
    cyrbuzz
        10
    cyrbuzz  
    OP
       2017-01-17 18:00:50 +08:00
    @noobsheldon 这好像是 web 服务器的工具包?我试了试没找到要怎么用能详细说说吗,谢谢。
    cyrbuzz
        11
    cyrbuzz  
    OP
       2017-01-17 18:01:55 +08:00
    @enenaaa @herozhang 谢谢,朝这个方向研究研究。
    lany
        12
    lany  
       2017-01-17 18:02:01 +08:00
    SSDT
    lany
        14
    lany  
       2017-01-17 18:26:56 +08:00
    不过也可以用注册表 obRegiestercallback
    morethansean
        15
    morethansean  
       2017-01-17 18:30:51 +08:00
    @cyrbuzz 计费进程还不好办……要么心跳要么主程序检测不到计费程序直接退出不就好了?
    0x01f
        16
    0x01f  
       2017-01-17 18:30:52 +08:00
    没驱动的话没办法解决,分分钟关掉。趁早放弃做计费的想法,或者加驱动。
    cyrbuzz
        17
    cyrbuzz  
    OP
       2017-01-17 18:33:23 +08:00
    @morethansean 主程序被关了一样没办法。。
    morethansean
        18
    morethansean  
       2017-01-17 18:37:18 +08:00
    @cyrbuzz 我的意思是,如果是一个软件在使用过程中要收费的,那么这个软件在运行过程中检测收费进程还在不在不就好了,软件都被关了本来也不应该计费了啊……主要是不太清楚你的需求到底是咋样的……所以只能猜测……
    cyrbuzz
        19
    cyrbuzz  
    OP
       2017-01-17 18:53:08 +08:00
    @morethansean 这...就像网吧里的计费一样,在没有服务端时,我如果把网吧里的计费进程关了可我还是能用电脑啊。(网管来揍人不算。)
    noobsheldon
        20
    noobsheldon  
       2017-01-17 20:26:32 +08:00 via Android   ❤️ 1
    @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 打开另一个解释器。
    nfroot
        21
    nfroot  
       2017-01-18 09:15:06 +08:00
    @cyrbuzz “我如果把网吧里的计费进程关了可我还是能用电脑啊。(网管来揍人不算。)”

    下一代网吧计费软件直接接管电源,看你们怎么关 = =。
    sighforever
        22
    sighforever  
       2017-01-18 09:46:27 +08:00
    @cyrbuzz 所以最好的当然就是有个服务端了啊,服务端检测不到就直接关闭电脑
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2431 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 15:57 · PVG 23:57 · LAX 07:57 · JFK 10:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.