答案 0 :(得分:6)
通常的方法是进入C并通过系统上的进程序列号进行枚举(回到Mac OS X之前的几天).NSWorkspace有API,但它们并不总是以您期望的方式工作
请注意,经典流程(在PowerPC系统上)将使用此代码进行枚举(具有不同的流程序列号),即使它们共享一个流程ID。
void DoWithProcesses(void (^ callback)(pid_t)) {
ProcessSerialNumber psn = { 0, kNoProcess };
while (noErr == GetNextProcess(&psn)) {
pid_t pid;
if (noErr == GetProcessPID(&psn, &pid)) {
callback(pid);
}
}
}
然后,您可以调用该函数并传递一个块,该块将使用PID执行您想要的操作。
使用NSRunningApplication
和NSWorkspace
:
void DoWithProcesses(void (^ callback)(pid_t)) {
NSArray *runningApplications = [[NSWorkspace sharedWorkspace] runningApplications];
for (NSRunningApplication *app in runningApplications) {
pid_t pid = [app processIdentifier];
if (pid != ((pid_t)-1)) {
callback(pid);
}
}
}
答案 1 :(得分:3)
您可以使用BSD sysctl例程或ps命令获取所有BSD进程的列表。看看https://stackoverflow.com/a/18821357/944634
答案 2 :(得分:1)