File indexing completed on 2024-04-28 05:31:37

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