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 }