Próbuję uzyskać listę wszystkich uruchomionych pakietów aplikacji. Aplikacje GUI, które użytkownik uruchomił, np. Dock, lub Monitor aktywności (pokazuje ikonę obok niektórych procesów). Zauważyłem, że mogę użyć sysctl()
z KERN_PROC_ALL
, aby uzyskać listę wszystkich uruchomionych procesów, ale to nie powie mi, z którego pakietu aplikacji pochodzą. Aplikacje takie jak Minecraft po prostu pojawiają się jako java
i to nie jest zbyt użyteczne.Programowe pobieranie pakietów aplikacji w systemie OS X
znalazłem, że nazwa grupy procesów w monitorze aktywności pokazuje z grubsza to, co chcę wiedzieć: Activity Monitor Showing Minecraft Launcher Running http://gdries.nl/activmon.png
język Realizacja nie jest ważne. Obecnie pracuje w C i idzie, ale jeśli okaże się, że inne środowisko jest wymagane, to nie jest problem. Wszystko, co chcę zrobić, to wykryć aplikacje, które uruchamia użytkownik, aby móc rejestrować czas, w którym każdy z nich był używany. (Kontrola rodzicielska robi coś podobnego, ale loguje je w plikach plist, których nie mogę przetworzyć)
pobierz kod narzędzia "ps" i użyj tego, czego potrzebujesz. – user3629249
"ps" zna tylko procesy i nie ma pojęcia, z jakiego pakietu aplikacji pochodzi dany proces, a nawet, że istnieje coś takiego jak pakiet aplikacji. Daje mi te same informacje, które mogę już uzyskać z 'sysctl',' KERN_PROC_ALL' i 'KERN_PROCARGS' (chociaż jego format powrotu jest tajemny i nieudokumentowany). –