【问题标题】:NSTask + ps + App Sandbox = errorNSTask + ps + App Sandbox = 错误
【发布时间】:2014-08-04 20:48:52
【问题描述】:

我正在尝试通过 OS X 上的 NSTask 使用 bash "ps" 命令获取进程列表。

当我打开 App Sandbox 时,应用程序崩溃并且我在控制台中收到此错误:

14.06.14 2:16:35,426 sandboxd[356]: ([74340]) MyApp(74340) deny forbidden-exec-sugid

这个问题有解决办法吗?

代码片段:

NSTask *topTask = [NSTask new];
[topTask setLaunchPath:@"/bin/ps"];
[topTask setArguments:[NSArray arrayWithObjects:
                       @"-eo", @"pid,pcpu,rss,comm", // output columns
                       nil]];

【问题讨论】:

    标签: objective-c xcode sandbox


    【解决方案1】:

    ps 是一个 setuid 根进程,因此不能在沙箱中运行。

    您可以在沙箱中拥有的是 pid, rss, comm,但不是来自 [[NSWorkspace sharedWorkspace] runningApplications]pcpu,这将为您提供 NSRunningApplication 的 NSArray

    您可能可以使用libproc () 或 sysctl 实现等效功能。 Similar question for statistics

    根据您的目标,observing processes: TN2050 上有一个有趣的链接

    【讨论】:

    • 似乎 libproc 也不会为您提供有关其他进程的 CPU 信息。 proc_pid_rusage 非常适合获取 cpu 时间,但是如果您激活沙箱,则无论您提供什么 PID,您都只能获得自己的 cpu 时间:(
    猜你喜欢
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 2012-07-18
    • 2013-11-16
    • 2017-08-18
    • 1970-01-01
    • 2015-05-29
    • 2016-10-10
    相关资源
    最近更新 更多