You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xcode下调用host_processor_sets返回KERN_INVALID_ARGUMENT错误求解

排查解决步骤
  • 首先修正主机端口权限获取逻辑:你当前使用的mach_host_self()返回的是普通权限的主机端口,没有操作处理器集的权限,需要先调用host_get_host_priv()获取特权主机端口,直接传普通端口会触发KERN_INVALID_ARGUMENT错误。
  • 校验运行权限实际生效状态:即使在Scheme中配置了root权限运行,也要在代码中打印getuid()确认返回值为0。macOS的系统完整性保护(SIP)、应用沙盒、Hardened Runtime限制都可能导致权限配置失效,可临时关闭SIP的调试限制后重试。
  • 检查Swift与C API的桥接正确性:processor_set_name_array_t是内核自动分配的出参,不需要提前手动初始化,注意不要对Optional类型的指针做错误的内存绑定。
  • 补充entitlement配置:macOS 10.15+版本运行该代码,需要在项目的Signing & Capabilities中开启Hardened Runtime,同时添加com.apple.security.cs.debugger权限,否则即使是root用户也会触发参数错误。

注意:该API仅支持macOS平台,iOS/iPadOS系统存在沙盒限制,调用会直接返回错误

修正后的可运行代码示例

import Foundation
import Mach

fileprivate let machHost = mach_host_self()
var hostPriv: host_priv_t = 0
// 先获取特权主机端口
let privKr = host_get_host_priv(machHost, &hostPriv)
guard privKr == KERN_SUCCESS else {
    print("获取特权端口失败,错误码:\(privKr)")
    exit(-1)
}

var psets: processor_set_name_array_t?
var pcnt: mach_msg_type_number_t = 0
let result = host_processor_sets(hostPriv, &psets, &pcnt)

if result == KERN_SUCCESS {
    print("调用成功,处理器集数量:\(pcnt)")
    // 内核分配的内存需要手动释放
    vm_deallocate(
        mach_task_self_,
        vm_address_t(UInt(bitPattern: psets)),
        vm_size_t(pcnt * MemoryLayout<processor_set_name_t>.stride)
    )
} else {
    print("调用失败,错误码:\(result)")
}

内容的提问来源于stack exchange,提问作者Ramkumar Srinivasan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 07:48:02