Apple изменила свою модель безопасности ОС таким образом, что нарушает функциональность task_for_pid
, на которую опирается cputhrottle
. Кажется, что изменение нарушает cputhrottle
, и я подозреваю, что cputhrottle
на самом деле не работает, когда вы вызываете его вручную.
Похоже, что Apple действительно не хочет использовать task_for_pid
, поскольку на данный момент она полностью не документирована в документах Apple API, и попытка найти ссылку на нее в любой документации в любом месте также очень трудна. Я понятия не имею, почему автор cputhrottle
решил использовать эту конкретную функцию для построения своей программы.
Если вы действительно хотите, вы можете перестроить cputhrottle, чтобы получить правильные разрешения безопасности.
Другое решение здесь - найти другую программу для использования. Может быть, просто использовать встроенную nice
функциональность?
Ссылки на изменения безопасности OS API:
http://os -tres.net / блог / 2010/02/17 / MAC-OS-X-и-задача-для-Pid-маха-вызов /
https://developer.apple.com/library/archive/documentation/Security/Conceptual/System_Integrity_Protection_Guide/RuntimeProtections/RuntimeProtections.html
Источник для ловушки task_for_pid
Маха, если вам интересно:
https://github.com/apple/darwin-xnu/blob/a449c6a3b8014d9406c2ddbdc81795da24aa7443/bsd/vm/vm_unix.c#L783-L929
Чтобы лучше объяснить сообщение об ошибке, которое вы также видите, код выхода 5 на самом деле KERN_FAILURE
, что является универсальным универсальным сигналом, указывающим, что вызываемая функция ядра не удалась. В этом случае, вероятно, из-за неправильных разрешений безопасности.
https://github.com/apple/darwin-xnu/blob/0a798f6738bc1db01281fc08ae024145e84df927/osfmk/mach/kern_return.h#L94-L96