File indexing completed on 2024-04-28 16:49:53

0001 /*
0002     SPDX-FileCopyrightText: 2007 John Tapsell <tapsell@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "process.h"
0008 #include <KLocalizedString>
0009 
0010 namespace KSysGuard
0011 {
0012 class ProcessPrivate
0013 {
0014 public:
0015     long pid;
0016     long parent_pid;
0017     Process *parent;
0018     QString login;
0019     qlonglong uid;
0020     qlonglong euid;
0021     qlonglong suid;
0022     qlonglong fsuid;
0023     qlonglong gid;
0024     qlonglong egid;
0025     qlonglong sgid;
0026     qlonglong fsgid;
0027     qlonglong tracerpid;
0028     QByteArray tty;
0029     qlonglong userTime;
0030     qlonglong sysTime;
0031     qlonglong startTime;
0032     int userUsage;
0033     int sysUsage;
0034     int totalUserUsage;
0035     int totalSysUsage;
0036     unsigned long numChildren;
0037     int niceLevel;
0038     Process::Scheduler scheduler;
0039     Process::IoPriorityClass ioPriorityClass;
0040     int ioniceLevel;
0041     qlonglong vmSize;
0042     qlonglong vmRSS;
0043     qlonglong vmURSS;
0044     qlonglong vmPSS;
0045     qlonglong vmSizeChange;
0046     qlonglong vmRSSChange;
0047     qlonglong vmURSSChange;
0048     qlonglong vmPSSChange;
0049     unsigned long pixmapBytes;
0050     bool hasManagedGuiWindow;
0051     QString name;
0052     QString command;
0053     Process::ProcessStatus status;
0054     qlonglong ioCharactersRead;
0055     qlonglong ioCharactersWritten;
0056     qlonglong ioReadSyscalls;
0057     qlonglong ioWriteSyscalls;
0058     qlonglong ioCharactersActuallyRead;
0059     qlonglong ioCharactersActuallyWritten;
0060     long ioCharactersReadRate;
0061     long ioCharactersWrittenRate;
0062     long ioReadSyscallsRate;
0063     long ioWriteSyscallsRate;
0064     long ioCharactersActuallyReadRate;
0065     long ioCharactersActuallyWrittenRate;
0066     int numThreads;
0067     QList<Process *> children;
0068     QElapsedTimer timeKillWasSent;
0069     int index;
0070     Process::Changes changes;
0071     int elapsedTimeMilliSeconds;
0072     int noNewPrivileges;
0073     QString cGroup;
0074     QString macContext;
0075 };
0076 
0077 Process::Process()
0078     : d(new ProcessPrivate())
0079 {
0080     clear();
0081 }
0082 
0083 Process::Process(qlonglong _pid, qlonglong _ppid, Process *_parent)
0084     : d(new ProcessPrivate())
0085 {
0086     clear();
0087     d->pid = _pid;
0088     d->parent_pid = _ppid;
0089     d->parent = _parent;
0090 }
0091 
0092 Process::~Process()
0093 {
0094     delete d;
0095 }
0096 
0097 QString Process::niceLevelAsString() const
0098 {
0099     // Just some rough heuristic to map a number to how nice it is
0100     if (d->niceLevel == 0)
0101         return i18nc("Process Niceness", "Normal");
0102     if (d->niceLevel >= 10)
0103         return i18nc("Process Niceness", "Very low priority");
0104     if (d->niceLevel > 0)
0105         return i18nc("Process Niceness", "Low priority");
0106     if (d->niceLevel <= -10)
0107         return i18nc("Process Niceness", "Very high priority");
0108     if (d->niceLevel < 0)
0109         return i18nc("Process Niceness", "High priority");
0110     return QString(); // impossible;
0111 }
0112 
0113 QString Process::ioniceLevelAsString() const
0114 {
0115     // Just some rough heuristic to map a number to how nice it is
0116     if (d->ioniceLevel == 4)
0117         return i18nc("Process Niceness", "Normal");
0118     if (d->ioniceLevel >= 6)
0119         return i18nc("Process Niceness", "Very low priority");
0120     if (d->ioniceLevel > 4)
0121         return i18nc("Process Niceness", "Low priority");
0122     if (d->ioniceLevel <= 2)
0123         return i18nc("Process Niceness", "Very high priority");
0124     if (d->ioniceLevel < 4)
0125         return i18nc("Process Niceness", "High priority");
0126     return QString(); // impossible;
0127 }
0128 
0129 QString Process::ioPriorityClassAsString() const
0130 {
0131     switch (d->ioPriorityClass) {
0132     case None:
0133         return i18nc("Priority Class", "None");
0134     case RealTime:
0135         return i18nc("Priority Class", "Real Time");
0136     case BestEffort:
0137         return i18nc("Priority Class", "Best Effort");
0138     case Idle:
0139         return i18nc("Priority Class", "Idle");
0140     default:
0141         return i18nc("Priority Class", "Unknown");
0142     }
0143 }
0144 
0145 QString Process::translatedStatus() const
0146 {
0147     switch (d->status) {
0148     case Running:
0149         return i18nc("process status", "running");
0150     case Sleeping:
0151         return i18nc("process status", "sleeping");
0152     case DiskSleep:
0153         return i18nc("process status", "disk sleep");
0154     case Zombie:
0155         return i18nc("process status", "zombie");
0156     case Stopped:
0157         return i18nc("process status", "stopped");
0158     case Paging:
0159         return i18nc("process status", "paging");
0160     case Ended:
0161         return i18nc("process status", "finished");
0162     default:
0163         return i18nc("process status", "unknown");
0164     }
0165 }
0166 
0167 QString Process::schedulerAsString() const
0168 {
0169     switch (d->scheduler) {
0170     case Fifo:
0171         return i18nc("Scheduler", "FIFO");
0172     case RoundRobin:
0173         return i18nc("Scheduler", "Round Robin");
0174     case Interactive:
0175         return i18nc("Scheduler", "Interactive");
0176     case Batch:
0177         return i18nc("Scheduler", "Batch");
0178     case SchedulerIdle:
0179         return i18nc("Scheduler", "Idle");
0180     default:
0181         return QString();
0182     }
0183 }
0184 
0185 void Process::clear()
0186 {
0187     d->pid = -1;
0188     d->parent_pid = -1;
0189     d->parent = nullptr;
0190     d->uid = 0;
0191     d->gid = -1;
0192     d->suid = d->euid = d->fsuid = -1;
0193     d->sgid = d->egid = d->fsgid = -1;
0194     d->tracerpid = -1;
0195     d->userTime = 0;
0196     d->sysTime = 0;
0197     d->startTime = 0;
0198     d->userUsage = 0;
0199     d->sysUsage = 0;
0200     d->totalUserUsage = 0;
0201     d->totalSysUsage = 0;
0202     d->numChildren = 0;
0203     d->niceLevel = 0;
0204     d->vmSize = 0;
0205     d->vmRSS = 0;
0206     d->vmURSS = 0;
0207     d->vmPSS = 0;
0208     d->vmSizeChange = 0;
0209     d->vmRSSChange = 0;
0210     d->vmURSSChange = 0;
0211     d->vmPSSChange = 0;
0212     d->pixmapBytes = 0;
0213     d->hasManagedGuiWindow = false;
0214     d->status = OtherStatus;
0215     d->ioPriorityClass = None;
0216     d->ioniceLevel = -1;
0217     d->scheduler = Other;
0218     d->ioCharactersRead = 0;
0219     d->ioCharactersWritten = 0;
0220     d->ioReadSyscalls = 0;
0221     d->ioWriteSyscalls = 0;
0222     d->ioCharactersActuallyRead = 0;
0223     d->ioCharactersActuallyWritten = 0;
0224     d->ioCharactersReadRate = 0;
0225     d->ioCharactersWrittenRate = 0;
0226     d->ioReadSyscallsRate = 0;
0227     d->ioWriteSyscallsRate = 0;
0228     d->ioCharactersActuallyReadRate = 0;
0229     d->ioCharactersActuallyWrittenRate = 0;
0230 
0231     d->elapsedTimeMilliSeconds = 0;
0232     d->numThreads = 0;
0233     d->changes = Process::Nothing;
0234 }
0235 
0236 long int Process::pid() const
0237 {
0238     return d->pid;
0239 }
0240 
0241 long int Process::parentPid() const
0242 {
0243     return d->parent_pid;
0244 }
0245 
0246 Process *Process::parent() const
0247 {
0248     return d->parent;
0249 }
0250 
0251 QString Process::login() const
0252 {
0253     return d->login;
0254 }
0255 
0256 qlonglong Process::uid() const
0257 {
0258     return d->uid;
0259 }
0260 
0261 qlonglong Process::euid() const
0262 {
0263     return d->euid;
0264 }
0265 
0266 qlonglong Process::suid() const
0267 {
0268     return d->suid;
0269 }
0270 
0271 qlonglong Process::fsuid() const
0272 {
0273     return d->fsuid;
0274 }
0275 
0276 qlonglong Process::gid() const
0277 {
0278     return d->gid;
0279 }
0280 
0281 qlonglong Process::egid() const
0282 {
0283     return d->egid;
0284 }
0285 
0286 qlonglong Process::sgid() const
0287 {
0288     return d->sgid;
0289 }
0290 
0291 qlonglong Process::fsgid() const
0292 {
0293     return d->fsgid;
0294 }
0295 
0296 qlonglong Process::tracerpid() const
0297 {
0298     return d->tracerpid;
0299 }
0300 
0301 QByteArray Process::tty() const
0302 {
0303     return d->tty;
0304 }
0305 
0306 qlonglong Process::userTime() const
0307 {
0308     return d->userTime;
0309 }
0310 
0311 qlonglong Process::sysTime() const
0312 {
0313     return d->sysTime;
0314 }
0315 
0316 qlonglong Process::startTime() const
0317 {
0318     return d->startTime;
0319 }
0320 
0321 int Process::noNewPrivileges() const
0322 {
0323     return d->noNewPrivileges;
0324 }
0325 
0326 int Process::userUsage() const
0327 {
0328     return d->userUsage;
0329 }
0330 
0331 int Process::sysUsage() const
0332 {
0333     return d->sysUsage;
0334 }
0335 
0336 int &Process::totalUserUsage() const
0337 {
0338     return d->totalUserUsage;
0339 }
0340 
0341 int &Process::totalSysUsage() const
0342 {
0343     return d->totalSysUsage;
0344 }
0345 
0346 long unsigned &Process::numChildren() const
0347 {
0348     return d->numChildren;
0349 }
0350 
0351 int Process::niceLevel() const
0352 {
0353     return d->niceLevel;
0354 }
0355 
0356 Process::Scheduler Process::scheduler() const
0357 {
0358     return d->scheduler;
0359 }
0360 
0361 Process::IoPriorityClass Process::ioPriorityClass() const
0362 {
0363     return d->ioPriorityClass;
0364 }
0365 
0366 int Process::ioniceLevel() const
0367 {
0368     return d->ioniceLevel;
0369 }
0370 
0371 qlonglong Process::vmSize() const
0372 {
0373     return d->vmSize;
0374 }
0375 
0376 qlonglong Process::vmRSS() const
0377 {
0378     return d->vmRSS;
0379 }
0380 
0381 qlonglong Process::vmURSS() const
0382 {
0383     return d->vmURSS;
0384 }
0385 
0386 qlonglong Process::vmPSS() const
0387 {
0388     return d->vmPSS;
0389 }
0390 
0391 qlonglong &Process::vmSizeChange() const
0392 {
0393     return d->vmSizeChange;
0394 }
0395 
0396 qlonglong &Process::vmRSSChange() const
0397 {
0398     return d->vmRSSChange;
0399 }
0400 
0401 qlonglong &Process::vmURSSChange() const
0402 {
0403     return d->vmURSSChange;
0404 }
0405 
0406 qlonglong Process::vmPSSChange() const
0407 {
0408     return d->vmPSSChange;
0409 }
0410 
0411 unsigned long &Process::pixmapBytes() const
0412 {
0413     return d->pixmapBytes;
0414 }
0415 
0416 bool &Process::hasManagedGuiWindow() const
0417 {
0418     return d->hasManagedGuiWindow;
0419 }
0420 
0421 QString Process::name() const
0422 {
0423     return d->name;
0424 }
0425 
0426 QString &Process::command() const
0427 {
0428     return d->command;
0429 }
0430 
0431 Process::ProcessStatus Process::status() const
0432 {
0433     return d->status;
0434 }
0435 
0436 qlonglong Process::ioCharactersRead() const
0437 {
0438     return d->ioCharactersRead;
0439 }
0440 
0441 qlonglong Process::ioCharactersWritten() const
0442 {
0443     return d->ioCharactersWritten;
0444 }
0445 
0446 qlonglong Process::ioReadSyscalls() const
0447 {
0448     return d->ioReadSyscalls;
0449 }
0450 
0451 qlonglong Process::ioWriteSyscalls() const
0452 {
0453     return d->ioWriteSyscalls;
0454 }
0455 
0456 qlonglong Process::ioCharactersActuallyRead() const
0457 {
0458     return d->ioCharactersActuallyRead;
0459 }
0460 
0461 qlonglong Process::ioCharactersActuallyWritten() const
0462 {
0463     return d->ioCharactersActuallyWritten;
0464 }
0465 
0466 long int Process::ioCharactersReadRate() const
0467 {
0468     return d->ioCharactersReadRate;
0469 }
0470 
0471 long int Process::ioCharactersWrittenRate() const
0472 {
0473     return d->ioCharactersWrittenRate;
0474 }
0475 
0476 long int Process::ioReadSyscallsRate() const
0477 {
0478     return d->ioReadSyscallsRate;
0479 }
0480 
0481 long int Process::ioWriteSyscallsRate() const
0482 {
0483     return d->ioWriteSyscallsRate;
0484 }
0485 
0486 long int Process::ioCharactersActuallyReadRate() const
0487 {
0488     return d->ioCharactersActuallyReadRate;
0489 }
0490 
0491 long int Process::ioCharactersActuallyWrittenRate() const
0492 {
0493     return d->ioCharactersActuallyWrittenRate;
0494 }
0495 
0496 int Process::numThreads() const
0497 {
0498     return d->numThreads;
0499 }
0500 
0501 QList<Process *> &Process::children() const
0502 {
0503     return d->children;
0504 }
0505 
0506 QElapsedTimer Process::timeKillWasSent() const
0507 {
0508     return d->timeKillWasSent;
0509 }
0510 
0511 int Process::index() const
0512 {
0513     return d->index;
0514 }
0515 
0516 Process::Changes Process::changes() const
0517 {
0518     return d->changes;
0519 }
0520 
0521 int Process::elapsedTimeMilliSeconds() const
0522 {
0523     return d->elapsedTimeMilliSeconds;
0524 }
0525 
0526 QString Process::cGroup() const
0527 {
0528     return d->cGroup;
0529 }
0530 
0531 QString Process::macContext() const
0532 {
0533     return d->macContext;
0534 }
0535 
0536 void Process::setParentPid(long int parent_pid)
0537 {
0538     d->parent_pid = parent_pid;
0539 }
0540 
0541 void Process::setParent(Process *parent)
0542 {
0543     d->parent = parent;
0544 }
0545 
0546 void Process::setLogin(const QString &login)
0547 {
0548     if (d->login == login)
0549         return;
0550     d->login = login;
0551     d->changes |= Process::Login;
0552 }
0553 
0554 void Process::setUid(qlonglong uid)
0555 {
0556     if (d->uid == uid)
0557         return;
0558     d->uid = uid;
0559     d->changes |= Process::Uids;
0560 }
0561 
0562 void Process::setEuid(qlonglong euid)
0563 {
0564     if (d->euid == euid)
0565         return;
0566     d->euid = euid;
0567     d->changes |= Process::Uids;
0568 }
0569 
0570 void Process::setSuid(qlonglong suid)
0571 {
0572     if (d->suid == suid)
0573         return;
0574     d->suid = suid;
0575     d->changes |= Process::Uids;
0576 }
0577 
0578 void Process::setFsuid(qlonglong fsuid)
0579 {
0580     if (d->fsuid == fsuid)
0581         return;
0582     d->fsuid = fsuid;
0583     d->changes |= Process::Uids;
0584 }
0585 
0586 void Process::setGid(qlonglong gid)
0587 {
0588     if (d->gid == gid)
0589         return;
0590     d->gid = gid;
0591     d->changes |= Process::Gids;
0592 }
0593 
0594 void Process::setEgid(qlonglong egid)
0595 {
0596     if (d->egid == egid)
0597         return;
0598     d->egid = egid;
0599     d->changes |= Process::Gids;
0600 }
0601 
0602 void Process::setSgid(qlonglong sgid)
0603 {
0604     if (d->sgid == sgid)
0605         return;
0606     d->sgid = sgid;
0607     d->changes |= Process::Gids;
0608 }
0609 
0610 void Process::setFsgid(qlonglong fsgid)
0611 {
0612     if (d->fsgid == fsgid)
0613         return;
0614     d->fsgid = fsgid;
0615     d->changes |= Process::Gids;
0616 }
0617 
0618 void Process::setTracerpid(qlonglong tracerpid)
0619 {
0620     if (d->tracerpid == tracerpid)
0621         return;
0622     d->tracerpid = tracerpid;
0623     d->changes |= Process::Tracerpid;
0624 }
0625 
0626 void Process::setTty(const QByteArray &tty)
0627 {
0628     if (d->tty == tty)
0629         return;
0630     d->tty = tty;
0631     d->changes |= Process::Tty;
0632 }
0633 
0634 void Process::setUserTime(qlonglong userTime)
0635 {
0636     d->userTime = userTime;
0637 }
0638 
0639 void Process::setSysTime(qlonglong sysTime)
0640 {
0641     d->sysTime = sysTime;
0642 }
0643 
0644 void Process::setStartTime(qlonglong startTime)
0645 {
0646     d->startTime = startTime;
0647 }
0648 
0649 void Process::setNoNewPrivileges(int number)
0650 {
0651     if (d->noNewPrivileges == number)
0652         return;
0653     d->noNewPrivileges = number;
0654     d->changes |= Process::Status;
0655 }
0656 
0657 void Process::setUserUsage(int _userUsage)
0658 {
0659     if (d->userUsage == _userUsage)
0660         return;
0661     d->userUsage = _userUsage;
0662     d->changes |= Process::Usage;
0663 }
0664 
0665 void Process::setSysUsage(int _sysUsage)
0666 {
0667     if (d->sysUsage == _sysUsage)
0668         return;
0669     d->sysUsage = _sysUsage;
0670     d->changes |= Process::Usage;
0671 }
0672 
0673 void Process::setTotalUserUsage(int _totalUserUsage)
0674 {
0675     if (d->totalUserUsage == _totalUserUsage)
0676         return;
0677     d->totalUserUsage = _totalUserUsage;
0678     d->changes |= Process::TotalUsage;
0679 }
0680 
0681 void Process::setTotalSysUsage(int _totalSysUsage)
0682 {
0683     if (d->totalSysUsage == _totalSysUsage)
0684         return;
0685     d->totalSysUsage = _totalSysUsage;
0686     d->changes |= Process::TotalUsage;
0687 }
0688 
0689 void Process::setNiceLevel(int _niceLevel)
0690 {
0691     if (d->niceLevel == _niceLevel)
0692         return;
0693     d->niceLevel = _niceLevel;
0694     d->changes |= Process::NiceLevels;
0695 }
0696 
0697 void Process::setScheduler(Scheduler _scheduler)
0698 {
0699     if (d->scheduler == _scheduler)
0700         return;
0701     d->scheduler = _scheduler;
0702     d->changes |= Process::NiceLevels;
0703 }
0704 
0705 void Process::setIoPriorityClass(IoPriorityClass _ioPriorityClass)
0706 {
0707     if (d->ioPriorityClass == _ioPriorityClass)
0708         return;
0709     d->ioPriorityClass = _ioPriorityClass;
0710     d->changes |= Process::NiceLevels;
0711 }
0712 
0713 void Process::setIoniceLevel(int _ioniceLevel)
0714 {
0715     if (d->ioniceLevel == _ioniceLevel)
0716         return;
0717     d->ioniceLevel = _ioniceLevel;
0718     d->changes |= Process::NiceLevels;
0719 }
0720 
0721 void Process::setVmSize(qlonglong _vmSize)
0722 {
0723     if (d->vmSizeChange != 0 || d->vmSize != 0)
0724         d->vmSizeChange = _vmSize - d->vmSize;
0725     if (d->vmSize == _vmSize)
0726         return;
0727     d->vmSize = _vmSize;
0728     d->changes |= Process::VmSize;
0729 }
0730 
0731 void Process::setVmRSS(qlonglong _vmRSS)
0732 {
0733     if (d->vmRSSChange != 0 || d->vmRSS != 0)
0734         d->vmRSSChange = _vmRSS - d->vmRSS;
0735     if (d->vmRSS == _vmRSS)
0736         return;
0737     d->vmRSS = _vmRSS;
0738     d->changes |= Process::VmRSS;
0739 }
0740 
0741 void Process::setVmURSS(qlonglong _vmURSS)
0742 {
0743     if (d->vmURSSChange != 0 || d->vmURSS != 0)
0744         d->vmURSSChange = _vmURSS - d->vmURSS;
0745     if (d->vmURSS == _vmURSS)
0746         return;
0747     d->vmURSS = _vmURSS;
0748     d->changes |= Process::VmURSS;
0749 }
0750 
0751 void Process::setVmPSS(qlonglong pss)
0752 {
0753     if (d->vmPSSChange != 0 || d->vmPSS != 0) {
0754         d->vmPSSChange = pss - d->vmPSS;
0755     }
0756 
0757     if (d->vmPSS == pss) {
0758         return;
0759     }
0760 
0761     d->vmPSS = pss;
0762     d->changes |= Process::VmPSS;
0763 }
0764 
0765 void Process::setName(const QString &_name)
0766 {
0767     if (d->name == _name)
0768         return;
0769     d->name = _name;
0770     d->changes |= Process::Name;
0771 }
0772 
0773 void Process::setCommand(const QString &_command)
0774 {
0775     if (d->command == _command)
0776         return;
0777     d->command = _command;
0778     d->changes |= Process::Command;
0779 }
0780 
0781 void Process::setStatus(ProcessStatus _status)
0782 {
0783     if (d->status == _status)
0784         return;
0785     d->status = _status;
0786     d->changes |= Process::Status;
0787 }
0788 
0789 void Process::setIoCharactersRead(qlonglong number)
0790 {
0791     if (d->ioCharactersRead == number)
0792         return;
0793     d->ioCharactersRead = number;
0794     d->changes |= Process::IO;
0795 }
0796 
0797 void Process::setIoCharactersWritten(qlonglong number)
0798 {
0799     if (d->ioCharactersWritten == number)
0800         return;
0801     d->ioCharactersWritten = number;
0802     d->changes |= Process::IO;
0803 }
0804 
0805 void Process::setIoReadSyscalls(qlonglong number)
0806 {
0807     if (d->ioReadSyscalls == number)
0808         return;
0809     d->ioReadSyscalls = number;
0810     d->changes |= Process::IO;
0811 }
0812 
0813 void Process::setIoWriteSyscalls(qlonglong number)
0814 {
0815     if (d->ioWriteSyscalls == number)
0816         return;
0817     d->ioWriteSyscalls = number;
0818     d->changes |= Process::IO;
0819 }
0820 
0821 void Process::setIoCharactersActuallyRead(qlonglong number)
0822 {
0823     if (d->ioCharactersActuallyRead == number)
0824         return;
0825     d->ioCharactersActuallyRead = number;
0826     d->changes |= Process::IO;
0827 }
0828 
0829 void Process::setIoCharactersActuallyWritten(qlonglong number)
0830 {
0831     if (d->ioCharactersActuallyWritten == number)
0832         return;
0833     d->ioCharactersActuallyWritten = number;
0834     d->changes |= Process::IO;
0835 }
0836 
0837 void Process::setIoCharactersReadRate(long number)
0838 {
0839     if (d->ioCharactersReadRate == number)
0840         return;
0841     d->ioCharactersReadRate = number;
0842     d->changes |= Process::IO;
0843 }
0844 
0845 void Process::setIoCharactersWrittenRate(long number)
0846 {
0847     if (d->ioCharactersWrittenRate == number)
0848         return;
0849     d->ioCharactersWrittenRate = number;
0850     d->changes |= Process::IO;
0851 }
0852 
0853 void Process::setIoReadSyscallsRate(long number)
0854 {
0855     if (d->ioReadSyscallsRate == number)
0856         return;
0857     d->ioReadSyscallsRate = number;
0858     d->changes |= Process::IO;
0859 }
0860 
0861 void Process::setIoWriteSyscallsRate(long number)
0862 {
0863     if (d->ioWriteSyscallsRate == number)
0864         return;
0865     d->ioWriteSyscallsRate = number;
0866     d->changes |= Process::IO;
0867 }
0868 
0869 void Process::setIoCharactersActuallyReadRate(long number)
0870 {
0871     if (d->ioCharactersActuallyReadRate == number)
0872         return;
0873     d->ioCharactersActuallyReadRate = number;
0874     d->changes |= Process::IO;
0875 }
0876 
0877 void Process::setIoCharactersActuallyWrittenRate(long number)
0878 {
0879     if (d->ioCharactersActuallyWrittenRate == number)
0880         return;
0881     d->ioCharactersActuallyWrittenRate = number;
0882     d->changes |= Process::IO;
0883 }
0884 
0885 void Process::setNumThreads(int number)
0886 {
0887     if (d->numThreads == number)
0888         return;
0889     d->numThreads = number;
0890     d->changes |= Process::NumThreads;
0891 }
0892 
0893 void Process::setIndex(int index)
0894 {
0895     d->index = index;
0896 }
0897 
0898 void Process::setElapsedTimeMilliSeconds(int value)
0899 {
0900     d->elapsedTimeMilliSeconds = value;
0901 }
0902 
0903 void Process::setChanges(KSysGuard::Process::Change changes)
0904 {
0905     d->changes = changes;
0906 }
0907 
0908 void Process::setCGroup(const QString &_cGroup)
0909 {
0910     if (d->cGroup == _cGroup)
0911         return;
0912     d->cGroup = _cGroup;
0913     d->changes |= Process::Status;
0914 }
0915 
0916 void Process::setMACContext(const QString &_macContext)
0917 {
0918     if (d->macContext == _macContext)
0919         return;
0920     d->macContext = _macContext;
0921     d->changes |= Process::Status;
0922 }
0923 
0924 }