我们正在运行一个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 RegistryUserS-1-5-21-2812493808-1934077838-3320662659-500_Classes:
Process 2872 (DeviceHarddiskVolume1Python27python.exe) has opened key REGISTRYUSERS-1-5-21-2812493808-1934077838-3320662659-500_CLASSES
Process 2844 (DeviceHarddiskVolume1Python27python.exe) has opened key REGISTRYUSERS-1-5-21-2812493808-1934077838-3320662659-500_CLASSES
Process 2408 (DeviceHarddiskVolume1Python27python.exe) has opened key REGISTRYUSERS-1-5-21-2812493808-1934077838-3320662659-500_CLASSES
这到底是什么意思,我如何阻止Windows杀死一些线程?
当计划任务被配置为作为特定用户运行时,该用户的帐户将以非交互式方式登录,以便运行该任务。任务完成后,将卸载用户的注册表单元。由于某种原因,这发生得太早了。
从您的描述中,您有一个单独的计划任务,它启动各种子流程。看起来父进程很可能在子进程完成之前退出,这导致用户的注册表单元被卸载。您可以通过为过程创建和终止打开审计(在高级审计策略配置下的组策略中)或通过使用process Monitor(可从MS网站获得)等工具来验证此理论。
假设这是原因,修复方法是父进程在自己退出之前等待子进程退出;或者,根据您的情况,让父任务永远不退出可能是明智的。
如果你不能直接控制父进程和子进程之间的关系,那么你需要创建一个新的父进程来为你启动脚本,然后等待所有子进程完成或永远休眠,根据情况而定。
可能是您的一些文件损坏了。试试以下命令:
执行SFC(系统文件检查器)扫描,看看是否有帮助。
- 按Windows键+ x
- 选择命令提示符(Admin)。 输入
sfc /scannow
并回车。也执行一个chkdsk
:
- 按Windows Logo + C打开魅力栏。
- 现在点击设置,然后点击更多PC设置。现在单击"常规",然后单击"高级启动"下的"立即重新启动"。
- 现在点击故障排除。 现在单击高级选项并选择命令提示符。输入
chkdsk /r
,按回车键。最后但并非最不重要的是,如果以上不起作用,您可以执行启动修复:
- 按Windows logo + W打开搜索框 输入高级启动选项,按回车键。然后单击"高级启动"下的"立即重新启动"。
- 现在点击故障排除。
- 单击高级选项,然后单击自动修复。
希望能有所帮助。