python - 注册表句柄泄露?

标签 python windows python-2.7 amazon-ec2 python-multithreading

我们正在运行一个 Python 脚本(使用多线程)来在基于 Amazon-EC2 的 Windows Server 2008 计算机上执行一些工作。当机器启动时,我可以看到它开始执行 Python 脚本,然后我开始在事件日志中看到如下消息:

Windows detected your registry file is still in use by other applications or services. The    file will be unloaded now. The applications or services that hold your registry file may not function properly afterwards.  

DETAIL - 
19 user registry handles leaked from \Registry\User\S-1-5-21-2812493808-1934077838-3320662659-500_Classes:
Process 2872 (\Device\HarddiskVolume1\Python27\python.exe) has opened key \REGISTRY\USER\S-1-5-21-2812493808-1934077838-3320662659-500_CLASSES
Process 2844 (\Device\HarddiskVolume1\Python27\python.exe) has opened key \REGISTRY\USER\S-1-5-21-2812493808-1934077838-3320662659-500_CLASSES
Process 2408 (\Device\HarddiskVolume1\Python27\python.exe) has opened key \REGISTRY\USER\S-1-5-21-2812493808-1934077838-3320662659-500_CLASSES

这到底是什么意思?如何阻止 Windows 终止某些线程?

最佳答案

当计划任务配置为以特定用户身份运行时,该用户的帐户将以非交互方式登录才能运行该任务。任务完成后,用户的注册表配置单元将被卸载。由于某种原因,这种情况发生得太早了。

根据您的描述,您有一个计划任务,它启动各种子流程。父进程可能在子进程完成之前退出,这导致用户的注册表配置单元被卸载。您可以通过打开对进程创建和终止的审核(在高级审核策略配置下的组策略中)或使用 Process Monitor(可从 MS 网站获取)等工具来验证这一理论。

假设这是原因,修复方法是父进程等待子进程退出后再退出;或者,根据您的情况,父任务永远不退出可能是明智的。

如果您无法直接控制父进程和子进程之间的关系,那么您需要创建一个新的父进程来为您启动脚本,然后等待所有子进程完成或休眠永远,视情况而定。

关于python - 注册表句柄泄露?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22464792/

相关文章:

python - 生成列表,允许重复并符合条件

windows - 如何在 Windows 上同时使用 ActiveState 和 Strawberry perl

node.js - 错误 SSL 问题 npm WIndows

java - 为什么 JavaFX 在 NetBeans 之外的工作方式不同?

python-2.7 - 将 "bytes"的字符串转换为 uint8 的 numpy 数组

python - Scrapy:无法从我的项目数据(价格)中删除 unicode

python - 使用 seaborn 色调时分配平均标记的颜色

python - 在嵌套函数中使用全局名称

python - 如何在数据科学体验上实现 TensorFrames Spark 包?

python-3.x - 如何在 Python 2.7 而不是 Python 3.6 中安装模块?