繁体   English   中英

如何以编程方式在OS X中获得所有进程名称?

[英]how can i get all process name in os x programmatically? not just app processes

我想在os x系统中获取过程信息的快照。

“ NSProcessInfo”只能获取调用过程的信息。

ps cmd可以是一种解决方案,但我想使用ac或Objective-c程序。

这是一个使用libproc.h遍历系统上所有进程并确定其中有多少属于该进程的有效用户的示例。 您可以根据需要轻松修改它。

- (NSUInteger)maxSystemProcs
{
    int32_t maxproc;
    size_t len = sizeof(maxproc);
    sysctlbyname("kern.maxproc", &maxproc, &len, NULL, 0);

    return (NSUInteger)maxproc;
}

- (NSUInteger)runningUserProcs
{
    NSUInteger maxSystemProcs = self.maxSystemProcs;

    pid_t * const pids = calloc(maxSystemProcs, sizeof(pid_t));
    NSAssert(pids, @"Memory allocation failure.");

    const int pidcount = proc_listallpids(pids, (int)(maxSystemProcs * sizeof(pid_t)));

    NSUInteger userPids = 0;
    uid_t uid = geteuid();
    for (int *pidp = pids; *pidp; pidp++) {
        struct proc_bsdshortinfo bsdshortinfo;
        int writtenSize;

        writtenSize = proc_pidinfo(*pidp, PROC_PIDT_SHORTBSDINFO, 0, &bsdshortinfo, sizeof(bsdshortinfo));

        if (writtenSize != (int)sizeof(bsdshortinfo)) {
            continue;
        }

        if (bsdshortinfo.pbsi_uid == uid) {
            userPids++;
        }
    }

    free(pids);
    return (NSUInteger)userPids;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM