如何檢索此信息?鑑於NSRunningApplication
實例,我需要知道是誰啓動它的。活動監視器顯示此信息。找到啓動NSRunningApplication的用戶
回答
如果你只需要誰發動的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
從NSRunningApplication的文檔:只跟蹤用戶應用程序;這不提供有關係統上每個進程的信息。
即,它不會給你所有的系統進程。
最接近你可以做的是從NSWorkspace
抓住runningApplications
。但這將是一個不完整的列表。
或者,您可以下潛到系統在活動監視器中使用的相同API。但那會很痛苦。或者你可以從NSTask啓動ps auxwww
並解析輸出,也很痛苦。
我已經使用runningApplications從NSWorkspace,但它返回NSRunningApplications的數組,所以我們回到我最初的問題。解析ps的輸出是一個相當聰明的提示,儘管... – user732274
@ user732274問題是,'NSWorkspace'的'runningApplications'非常不完整;它只返回正在運行調用'runningApplications'的代碼的用戶正在運行的一小部分進程。 – bbum
他需要所有的流程嗎?這個問題不是很清楚。 – Wevah
- 1. Swift:使用NSRunningApplication
- 2. 獲取NSRunningApplication的ProcessInfo
- 3. NSRunningApplication - 終止
- 4. 使用ProcessSerialNumber獲取NSRunningApplication
- 5. 如何找到用戶剛啓動的可執行文件?
- 6. 表未找到:JBoss 6啓動期間的用戶
- 7. 找到啓動服務的用戶的用戶名和密碼c#
- 8. 找出進程中啓動用戶
- 9. 找不到啓動活動
- 10. 春季啓動OAuth 2.0 UserDetails用戶未找到
- 11. 無法啓動活動找不到活動來啓動意圖
- 12. 找到啓用的協議
- 13. 找不到啓動程序活動
- 14. 找不到啓動器活動! - Android
- 15. 找不到啓動器活動錯誤?
- 16. 沒有啓動活動找到 - 安卓
- 17. 找不到啓動器活動
- 18. ServiceMix的啓動頁說404未找到
- 19. bash在su sudo之前找到最初啓動腳本的用戶
- 20. 找出工作站上的哪個用戶啓動了程序
- 21. 春季啓動JSP沒有找到我的春節,啓動應用程序
- 22. 行動「google_oauth2」無法找到用戶:: OmniauthCallbacksController
- 23. 如何獲取NSRunningApplication的窗口
- 24. 非root用戶啓動supervisor
- 25. Appinventor - 查找啓動圖標/啓動appinventor
- 26. 用Runit和用戶的RVM啓動Unicorn
- 27. 找不到模塊啓動服務器
- 28. Bluemix SDK無法找到完成啓動
- 29. 無法找到主啓動類
- 30. 找到服務器tomcat是否啓動?
糟糕,不會返回錯誤,看起來像;它會返回一個大小。定影。 – Wevah
您的方法應該加上前綴,因爲它位於框架類的類別中。此外,由於'NSRunningApplication'僅代表由運行上面的代碼和,然後同一個用戶運行的應用程序,只有當前正在運行的應用程序的一個子集,該代碼並沒有真正做多的整體利益(但當然可以使用通過OP,如果他們首先獲取PID列表)。 – bbum
如果他所關心的只是「運行應用程序」,那應該沒問題;他不清楚他是想要所有的流程還是隻需要應用。 :/ – Wevah