我正在尝试重新创建psutil项目上的一些功能(https://code.google.com/p/psutil/)使用ctypes。使用psutil对于我想要的东西来说是一种过激行为,它只是简单地检查给定的pid是否正在运行。在
我试图重新创建的代码段是pid_is_running function。在
int
pid_is_running(DWORD pid)
{
HANDLE hProcess;
DWORD exitCode;
// Special case for PID 0 System Idle Process
if (pid == 0) {
return 1;
}
if (pid < 0) {
return 0;
}
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,
FALSE, pid);
if (NULL == hProcess) {
// invalid parameter is no such process
if (GetLastError() == ERROR_INVALID_PARAMETER) {
CloseHandle(hProcess);
return 0;
}
// access denied obviously means there's a process to deny access to...
if (GetLastError() == ERROR_ACCESS_DENIED) {
CloseHandle(hProcess);
return 1;
}
CloseHandle(hProcess);
PyErr_SetFromWindowsErr(0);
return -1;
}
if (GetExitCodeProcess(hProcess, &exitCode)) {
CloseHandle(hProcess);
return (exitCode == STILL_ACTIVE);
}
// access denied means there's a process there so we'll assume it's running
if (GetLastError() == ERROR_ACCESS_DENIED) {
CloseHandle(hProcess);
return 1;
}
PyErr_SetFromWindowsErr(0);
CloseHandle(hProcess);
return -1;
}
我不明白为什么代码要关闭一个空句柄。这真的有必要吗?它是错误的还是可能导致错误?在
我也将非常感谢您对我目前所能提出的任何意见
^{pr2}$
它可能是自动生成的,以关闭每个返回路径。即使是C程序员也没有愚蠢到可以在每一条路径上释放资源,而是使用基于goto的清理习惯用法。在
当然了
可能表示代码使用内部NT API函数,这些函数在将来的任何时候都会更改并破坏代码。在
相关问题 更多 >
编程相关推荐