objective-c 获取进程列表、它们的路径和参数

objective-c get list of processes, their paths AND arguments

获取进程列表及其路径非常容易;

    int numberOfProcesses = proc_listpids(PROC_ALL_PIDS, 0, NULL, 0);
pid_t pids[1024];
bzero(pids, 1024);
proc_listpids(PROC_ALL_PIDS, 0, pids, sizeof(pids));
for (int i = 0; i < numberOfProcesses; ++i) {
    if (pids[i] == 0) { continue; }
    char pathBuffer[PROC_PIDPATHINFO_MAXSIZE];
    bzero(pathBuffer, PROC_PIDPATHINFO_MAXSIZE);
    proc_pidpath(pids[i], pathBuffer, sizeof(pathBuffer));

    char arguments[KERN_PROCARGS2];

    if (strlen(pathBuffer) > 0) {
        printf("path: %s\n", pathBuffer);
    }
}

但是,我还想获得用于启动这些进程的任何参数。我似乎无法找到如何做到这一点。任何指针?

指针? ps 命令列出了它们,其源代码作为 Apple 开源的一部分提供:ps folder.

./build64.sh # Build cmdline app for 64-bit Intel Mac
# Enumerate all processes running and print the argvs
./xproc --pid-enum | xargs -L1 ./xproc --cmd-from-pid 

直接调用函数会比 运行 一个新任务更快。

可以为 Windows、MacOS、Linux 和 FreeBSD 构建源代码。

随意借用您可能需要的任何代码部分:

https://github.com/time-killer-games/xproc