void Monitor::procProcesses() { PIDList deletes; PIDList adds; unsigned long long totalTicks = 0; if ( fCPUTotalTicks.size() > 0 ) { totalTicks = fCPUTotalTicks[0]; } ProcessStatHandler statHandler(fProcMap, totalTicks); ProcessStatMHandler statMHandler(fProcMap, fTotalMemory); ProcessCmdLineHandler cmdLineHandler(fProcMap, fAppNameMap); QStringList procList = fProcReader.getProcList(); QStringListIterator slIterator(procList); pid_t pid; int iteration = 0; while ( (pid = getNextPID(slIterator, iteration)) != 0 ) { iteration++; const QString pidStr = QString::number(pid); QString pathStatM("/proc/" + pidStr + "/statm"); QString pathCmdLine("/proc/" + pidStr + "/cmdline"); QString pathStat("/proc/" + pidStr + "/stat"); if ( !fProcMap.contains(pid) ) { fProcMap[pid]; adds.append(pid); } const QString oldName = fProcMap.value(pid).getStatName(); if ( fProcReader.readProcFile(pathStat, statHandler, 1, pid) != 0 ) { qCritical() << "Error reading process stat file " << pid << "\n"; continue; } if ( !oldName.isEmpty() && oldName != fProcMap.value(pid).getStatName() ) { fProcMap.remove(pid); fProcMap[pid]; deletes.append(pid); adds.append(pid); if ( fProcReader.readProcFile(pathStat, statHandler, 1, pid) != 0 ) { qCritical() << "Error reading process stat file " << pid << "\n"; continue; } } if ( fProcReader.readProcFile(pathStatM, statMHandler, 1, pid) != 0 ) { qCritical() << "Error reading process mstat file " << pid << "\n"; continue; } if ( fProcMap.value(pid).getNameState() == 0 ) { if ( fProcReader.readProcFile(pathCmdLine, cmdLineHandler, 1, pid) != 0 ) { qCritical() << "Error reading process cmdline file " << pid << "\n"; continue; } } } QMapIterator<pid_t, ProcInfo> iterator(fProcMap); while ( iterator.hasNext() ) { iterator.next(); const pid_t pid = iterator.key(); const QString pidStr = QString::number(pid); QString pathStat("/proc/" + pidStr + "/stat"); if ( !QFile::exists(pathStat) ) { fProcMap.remove(pid); deletes.append(pid); } } emit processChanged(&fProcMap, adds, deletes); }
static void GenStat(Stat& stat, const tao::json::value& v){ StatHandler statHandler(stat); tao::json::sax::from_value(v, statHandler); }