gpt4 book ai didi

python - Psutil 在获取进程属性时为所有非用户拥有的进程引发 AccessDenied

转载 作者:可可西里 更新时间:2023-11-01 14:18:35 26 4
gpt4 key购买 nike

我遇到了一个主要问题:我无法访问不属于用户的(大多数)进程的信息。例如,以下内容:

for proc in psutil.process_iter():
try:
print proc.pid, proc.username

except psutil.AccessDenied:
print "denied"

打印:

0 NT AUTHORITY\SYSTEM
4 NT AUTHORITY\SYSTEM
428 denied
444 denied
632 my_user
648 denied
676 my_user
704 denied
748 denied
772 denied
804 denied
824 denied
832 denied
880 my_user
920 denied
988 denied
1052 denied
...

对于这些相同的“拒绝”进程,get_cpu_times() 等方法可以正常工作。

UPD:抱歉,我用不同的属性和不同的打印运行了这个东西很多次,以至于我粘贴的输出来自不同的代码段(打印的用户名 ,而不是名称)。但是,我希望这一点仍然很清楚......

最佳答案

看来错误是在底层 C 代码中生成的。我不知道为什么GetProcessImageFileName()优先于 QueryFullProcessImageName() (因为后者返回的路径与我们预期的一样,使用驱动器号/UNC 路径),但调用可能会因其中任何一个而失败。

你可能不得不用 the developers 来解决这个问题.

来自 _psutil_mswindows.c(第 502 行):

if (GetProcessImageFileName(hProcess, &exe, nSize) == 0) {
CloseHandle(hProcess);
if (GetLastError() == ERROR_INVALID_PARAMETER) {
// see https://code.google.com/p/psutil/issues/detail?id=414
AccessDenied();
}
else {
PyErr_SetFromWindowsErr(0);
}
return NULL;
}

编辑:
我试图对症状做更多的调查,并且我有更多的报告。在安装了相对较新的 Python 2 (2.7.6) 的或多或少完全修补的 Win7 SP1 x64 机器上,我无法访问 psutil.Process 类的这些成员:exe , get_ionice(), get_memory_maps(), get_nice(), get_cwd()/getcwd()get_open_files()nameniceusername

Windows 机器的任何管理员用户当然都可以获得此信息,所以我不知道为什么 psutil 无法获取它,除非它以 The Wrong Way™(Microsoft 定义的永久移动目标)进行操作。

关于python - Psutil 在获取进程属性时为所有非用户拥有的进程引发 AccessDenied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21776302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com