プロセスの一時停止/再開を繰り返し、目標とするCPU使用率の上限を超えないように制御する
プロセスに対して、直接的に一時停止/再開を指示するようなドキュメント化されたAPIはありません。(*1)ただし、ドキュメント化されていないAPIである「NtSuspendProcess」および「NtResumeProcess」を使用すれば、プロセスに対する一時停止/再開ができるようです。
メリット
- スレッドレベルで一時停止/再開を行う時のような、スレッドの一時停止/再開に起因するようなプロセスのクラッシュを防止できる。
デメリット
- 公式にドキュメント化されていないため、将来的に仕様が変更になり、このAPIが使用できなくなる可能性がある。
この機能をC#から使用するには、APIをDLLからインポートする。
*1:
How to suspend/resume a process in Windows? - Stack Overflow
http://stackoverflow.com/questions/11010165/how-to-suspend-resume-a-process-in-windows
delphi - Suspend/resume processes as PsSuspend does - Stack Overflow
http://stackoverflow.com/questions/10153097/suspend-resume-processes-as-pssuspend-does