Source Code (Use browser search to find items of interest.)
Class Index
ktop'OSProcessList (./kdeutils/ktop/OSProcessList.h:59)
class OSProcessList : public QList<OSProcess>
{
public:
enum SORTKEY
{
SORTBY_PID = 0,
SORTBY_PPID,
SORTBY_NAME,
SORTBY_UID,
SORTBY_USERNAME,
SORTBY_CPU,
SORTBY_TIME,
SORTBY_PRIORITY,
SORTBY_STATUS,
SORTBY_VMSIZE,
SORTBY_VMRSS,
SORTBY_VMLIB
};
OSProcessList();
virtual ~OSProcessList()
{
delete lastTStamps;
}
/**
* This function clears the old process list and retrieves a current one
* from the OS.
*/
bool update(void);
/**
* The 'has...' functions can be used to inquire if the OS supports a
* specific process attribute. The return value may be hardcoded
* for each platform.
*/
bool hasName(void) const;
bool hasCmdLine(void) const;
bool hasUid(void) const;
bool hasUserTime(void) const;
bool hasSysTime(void) const;
bool hasUserLoad(void) const;
bool hasSysLoad(void) const;
bool hasStatus(void) const;
bool hasPriority(void) const;
bool hasNiceLevel(void) const;
bool hasVmSize(void) const;
bool hasVmRss(void) const;
bool hasVmLib(void) const;
void setSortCriteria(SORTKEY sk)
{
sortCriteria = sk;
}
SORTKEY getSortCriteria(void) const
{
return (sortCriteria);
}
/**
* This function is needed mainly because we can have errors during the
* constructor execution. Since it has no return value we can call this
* function to find out if the class is fully operational.
*/
bool ok(void) const
{
return (!error);
}
/**
* This function can be used when calls to ok() return false to find out
* what has happened. The error variable is cleared after a call to
* getErrMessage().
*/
const QString& getErrMessage(void)
{
error = false;
return (errMessage);
}
private:
/// This function is needed by the parent class to sort the list.
virtual int compareItems(Item it1, Item it2);
/// This variabled stores the criteria used to sort the list.
SORTKEY sortCriteria;
TimeStampList* lastTStamps;
/**
* These variables are used for error handling. When an error has occured
* error is set to true and the errMessage contains a more detailed
* description of the problem.
*/
bool error;
QString errMessage;
} ;
ktop'OSProcessList::OSProcessList() (./kdeutils/ktop/OSProcessList.cpp:62)
OSProcessList::OSProcessList()
{
error = false;
lastTStamps = NULL;
sortCriteria = SORTBY_PID;
setAutoDelete(true);
/*
* Here we make sure that the kernel has been compiled with /proc
* support enabled. If not we generate an error message and set the
* error variable to true.
*/
DIR* dir;
if ((dir = opendir("/proc")) == NULL)
{
error = true;
errMessage = i18n("Cannot open directory \'/proc\'!\n"
"The kernel needs to be compiled with support\n"
"for /proc filesystem enabled!");
return;
}
closedir(dir);
}
bool
ktop'OSProcessList::update() (./kdeutils/ktop/OSProcessList.cpp:90)
OSProcessList::update(void)
{
// delete old process list
clear();
// read in current process list via the /proc filesystem entry
DIR* dir;
struct dirent* entry;
TimeStampList* newTStamps = new TimeStampList;
// If there is no old list yet, we create an empty one.
if (!lastTStamps)
lastTStamps = new TimeStampList;
if ((dir = opendir("/proc")) == NULL)
{
error = true;
errMessage = i18n("Cannot open directory \'/proc\'!\n"
"The kernel needs to be compiled with support\n"
"for /proc filesystem enabled!");
return (false);
}
while ((entry = readdir(dir)))
{
if (isdigit(entry->d_name[0]))
{
OSProcess* ps = new OSProcess(entry->d_name, lastTStamps,
newTStamps);
if (!ps || !ps->ok())
{
/*
* Probably the process has just died or /proc/xxx/... hasn't
* been established yet.
*/
delete ps;
}
else
{
// insert process into sorted list
inSort(ps);
}
}
}
closedir(dir);
// make new list old one and discard the really old one
delete lastTStamps;
lastTStamps = newTStamps;
return (true);
}
bool
ktop'OSProcessList::hasName() (./kdeutils/ktop/OSProcessList.cpp:143)
OSProcessList::hasName(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasCmdLine() (./kdeutils/ktop/OSProcessList.cpp:149)
OSProcessList::hasCmdLine(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasUid() (./kdeutils/ktop/OSProcessList.cpp:155)
OSProcessList::hasUid(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasUserTime() (./kdeutils/ktop/OSProcessList.cpp:161)
OSProcessList::hasUserTime(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasSysTime() (./kdeutils/ktop/OSProcessList.cpp:167)
OSProcessList::hasSysTime(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasUserLoad() (./kdeutils/ktop/OSProcessList.cpp:173)
OSProcessList::hasUserLoad(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasSysLoad() (./kdeutils/ktop/OSProcessList.cpp:179)
OSProcessList::hasSysLoad(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasStatus() (./kdeutils/ktop/OSProcessList.cpp:185)
OSProcessList::hasStatus(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasPriority() (./kdeutils/ktop/OSProcessList.cpp:191)
OSProcessList::hasPriority(void) const
{
return (false);
}
bool
ktop'OSProcessList::hasNiceLevel() (./kdeutils/ktop/OSProcessList.cpp:197)
OSProcessList::hasNiceLevel(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasVmSize() (./kdeutils/ktop/OSProcessList.cpp:203)
OSProcessList::hasVmSize(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasVmRss() (./kdeutils/ktop/OSProcessList.cpp:209)
OSProcessList::hasVmRss(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasVmLib() (./kdeutils/ktop/OSProcessList.cpp:215)
OSProcessList::hasVmLib(void) const
{
return (true);
}
#elif __FreeBSD__
/* Port to FreeBSD by Hans Petter Bieker <zerium@webindex.no>.
*
* Copyright 1999 Hans Petter Bieker <zerium@webindex.no>.
*/
ktop'OSProcessList::OSProcessList() (./kdeutils/ktop/OSProcessList.cpp:275)
OSProcessList::OSProcessList()
{
error = false;
lastTStamps = NULL;
sortCriteria = SORTBY_PID;
setAutoDelete(true);
}
bool
ktop'OSProcessList::update() (./kdeutils/ktop/OSProcessList.cpp:287)
OSProcessList::update(void)
{
// delete old process list
clear();
int mib[3];
mib[0] = CTL_KERN;
mib[1] = KERN_PROC;
mib[2] = KERN_PROC_ALL;
size_t len;
sysctl(mib, 3, NULL, &len, NULL, 0);
struct kinfo_proc *p = (struct kinfo_proc *)malloc(len);
sysctl(mib, 3, p, &len, NULL, 0);
size_t num;
for (num = 0; num < len / sizeof(struct kinfo_proc); num++) {
OSProcess* ps = new OSProcess((char *)&p[num], 0, 0);
if (!ps || !ps->ok())
{
error = true;
if (ps)
errMessage = ps->getErrMessage();
else
errMessage = i18n("Cannot read status of processes\n");
delete ps;
return (false);
}
// insert process into sorted list
inSort(ps);
}
// make new list old one and discard the really old one
free(p);
return (true);
}
bool
ktop'OSProcessList::hasName() (./kdeutils/ktop/OSProcessList.cpp:329)
OSProcessList::hasName(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasCmdLine() (./kdeutils/ktop/OSProcessList.cpp:335)
OSProcessList::hasCmdLine(void) const
{
return (false);
}
bool
ktop'OSProcessList::hasUid() (./kdeutils/ktop/OSProcessList.cpp:341)
OSProcessList::hasUid(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasUserTime() (./kdeutils/ktop/OSProcessList.cpp:347)
OSProcessList::hasUserTime(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasSysTime() (./kdeutils/ktop/OSProcessList.cpp:353)
OSProcessList::hasSysTime(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasUserLoad() (./kdeutils/ktop/OSProcessList.cpp:359)
OSProcessList::hasUserLoad(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasSysLoad() (./kdeutils/ktop/OSProcessList.cpp:365)
OSProcessList::hasSysLoad(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasStatus() (./kdeutils/ktop/OSProcessList.cpp:371)
OSProcessList::hasStatus(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasPriority() (./kdeutils/ktop/OSProcessList.cpp:377)
OSProcessList::hasPriority(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasNiceLevel() (./kdeutils/ktop/OSProcessList.cpp:383)
OSProcessList::hasNiceLevel(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasVmSize() (./kdeutils/ktop/OSProcessList.cpp:389)
OSProcessList::hasVmSize(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasVmRss() (./kdeutils/ktop/OSProcessList.cpp:395)
OSProcessList::hasVmRss(void) const
{
return (true);
}
bool
ktop'OSProcessList::hasVmLib() (./kdeutils/ktop/OSProcessList.cpp:401)
OSProcessList::hasVmLib(void) const
{
// FreeBSD doesn't support this!??!
return (false);
}
ktop'OSProcessList::OSProcessList() (./kdeutils/ktop/OSProcessList.cpp:410)
OSProcessList::OSProcessList()
{
error = true;
errMessage = i18n("Your OS is not supported yet. Sorry");
return;
}
bool
ktop'OSProcessList::update() (./kdeutils/ktop/OSProcessList.cpp:419)
OSProcessList::update(void)
{
return (false);
}
bool
ktop'OSProcessList::hasName() (./kdeutils/ktop/OSProcessList.cpp:425)
OSProcessList::hasName(void) const
{
return (false);
}
bool
ktop'OSProcessList::hasCmdLine() (./kdeutils/ktop/OSProcessList.cpp:431)
OSProcessList::hasCmdLine(void) const
{
return (false);
}
bool
ktop'OSProcessList::hasUid() (./kdeutils/ktop/OSProcessList.cpp:437)
OSProcessList::hasUid(void) const
{
return (false);
}
bool
ktop'OSProcessList::hasUserTime() (./kdeutils/ktop/OSProcessList.cpp:443)
OSProcessList::hasUserTime(void) const
{
return (false);
}
bool
ktop'OSProcessList::hasSysTime() (./kdeutils/ktop/OSProcessList.cpp:449)
OSProcessList::hasSysTime(void) const
{
return (false);
}
bool
ktop'OSProcessList::hasUserLoad() (./kdeutils/ktop/OSProcessList.cpp:455)
OSProcessList::hasUserLoad(void) const
{
return (false);
}
bool
ktop'OSProcessList::hasSysLoad() (./kdeutils/ktop/OSProcessList.cpp:461)
OSProcessList::hasSysLoad(void) const
{
return (false);
}
bool
ktop'OSProcessList::hasStatus() (./kdeutils/ktop/OSProcessList.cpp:467)
OSProcessList::hasStatus(void) const
{
return (false);
}
bool
ktop'OSProcessList::hasPriority() (./kdeutils/ktop/OSProcessList.cpp:473)
OSProcessList::hasPriority(void) const
{
return (false);
}
bool
ktop'OSProcessList::hasNiceLevel() (./kdeutils/ktop/OSProcessList.cpp:479)
OSProcessList::hasNiceLevel(void) const
{
return (false);
}
bool
ktop'OSProcessList::hasVmSize() (./kdeutils/ktop/OSProcessList.cpp:485)
OSProcessList::hasVmSize(void) const
{
return (false);
}
bool
ktop'OSProcessList::hasVmRss() (./kdeutils/ktop/OSProcessList.cpp:491)
OSProcessList::hasVmRss(void) const
{
return (false);
}
bool
ktop'OSProcessList::hasVmLib() (./kdeutils/ktop/OSProcessList.cpp:497)
OSProcessList::hasVmLib(void) const
{
return (false);
}
#endif
/*
* The following code should be platform independant.
*/
ktop'OSProcessList::compareItems() (./kdeutils/ktop/OSProcessList.cpp:530)
OSProcessList::compareItems(Item it1, Item it2)
{
OSProcess* item1 = (OSProcess*) it1;
OSProcess* item2 = (OSProcess*) it2;
/*
* Since the sorting criteria for the process list can vary, we have to
* use this rather complex function to compare two processes. Some keys
* use descending sorting order which is reflected by the '* -1'.
*/
switch (sortCriteria)
{
case SORTBY_PID:
return (cmp(item1->getPid(), item2->getPid()));
case SORTBY_PPID:
return (cmp(item1->getPpid(), item2->getPpid()));
case SORTBY_UID:
return (cmp(item1->getUid(), item2->getUid()));
case SORTBY_USERNAME:
return (strcmp(item1->getUserName(), item2->getUserName()));
case SORTBY_NAME:
return (strcmp(item1->getName(), item2->getName()));
case SORTBY_TIME:
return (cmp(item1->getUserTime() + item1->getSysTime(),
item2->getUserTime() + item2->getSysTime()) * -1);
case SORTBY_PRIORITY:
return (cmp(item1->getPriority(), item2->getPriority()));
case SORTBY_STATUS:
return (strcmp(item1->getStatusTxt(), item2->getStatusTxt()));
case SORTBY_VMSIZE:
return (cmp(item1->getVm_size(), item2->getVm_size()) * -1);
case SORTBY_VMRSS:
return (cmp(item1->getVm_rss(), item2->getVm_rss()) * -1);
case SORTBY_VMLIB:
return (cmp(item1->getVm_lib(), item2->getVm_lib()) * -1);
case SORTBY_CPU:
default:
return (cmp(item1->getUserLoad() + item1->getSysLoad(),
item2->getUserLoad() + item2->getSysLoad()) * -1);
}
return (0);
}