查找启动NSRunningApplication的用户

时间:2014-01-11 18:58:12

标签: objective-c nsrunningapplication

如何检索此信息?给定一个NSRunningApplication实例,我需要知道谁发布了它。活动监视器显示此信息。

2 个答案:

答案 0 :(得分:2)

如果您只需要启动NSRunningApplication实例的用户名,那么这里应该是一个类别方法:

#import <libproc.h>
#import <pwd.h>

@implementation NSRunningApplication (UserName)

- (NSString *)foo_userName {
    pid_t pid = [self processIdentifier];
    struct proc_bsdshortinfo info;
    proc_pidinfo(pid, PROC_PIDT_SHORTBSDINFO, 0, &info, sizeof(info));
    struct passwd *passwd = getpwuid(info.pbsi_uid);
    return [NSString stringWithUTF8String:passwd->pw_name];
}

@end

答案 1 :(得分:1)

从NSRunningApplication上的文档:仅跟踪用户应用程序;这不提供有关系统上每个进程的信息。

即。它不会给你系统上的所有过程。

您最接近的是从runningApplications抓取NSWorkspace。但那将是一个不完整的清单。

或者,您可以深入查看系统在Activity Monitor中使用的相同API。但那会很痛苦。或者你可以从NSTask启动ps auxwww并解析输出,也很痛苦。