如何解决使用 Swift 获取正在运行的进程包括 root 拥有的进程的完整列表 结论
我正在开发一个用于监控 Swift 中消耗最高的进程的应用程序,但我无法获取当前正在运行的进程列表。我尝试了很多东西,例如:
- 运行
top
或ps aux | less
命令并解析输出。
我尝试使用此代码运行 top
命令并将输出传递给 NSPipe
以便稍后解析它,但我似乎无法运行该命令,因为它给出了错误Couldn't posix_spawn: error 13
,而且我在互联网上找不到任何有关如何解决此问题的信息,因此我不得不寻找其他方法。
let task = Process()
let pipe = Pipe()
task.standardOutput = pipe
task.launchPath = "/usr/bin"
task.arguments = ["top"]
task.launch()
task.waitUntilExit()
let data = String(data: pipe.fileHandleForReading.readDataToEndOfFile(),encoding: .utf8)!
- 使用
NSWorkspace.shared.runningApplications
我看到了关于同一主题的 this 堆栈溢出问题,但没有得到回答(一个评论引用了另一个线程,该线程回答了如何在 C 中进行操作,但这并不是我真正期望的)。线程的 OP 使用下面的代码来获取正在运行的进程的完整列表,但它只返回用户拥有的进程,所以它不是很有用。
let workspace = NSWorkspace.shared
let applications = workspace.runningApplications
for application in applications {
if let url = (application.executableURL?.absoluteString) {
os_log("%{public}s",log:scribe,type:.debug,url)
}
}
}
结论
有什么方法可以在 Swift 中获取 macOS 中正在运行的进程列表(包括 root 拥有的进程)?如果有另一种方法可以让我至少检索到两个最消耗 CPU 的进程也能这样做。
提前致谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。