7
votes

Comment obtenir une liste de tous les processus d'exécution sur un Mac?

Ce serait bien de bien obtenir:

  1. l'identifiant de processus de chacun
  2. Combien de temps de processeur est utilisé par le processus

    et pouvons-nous faire cela pour Mac en C ou l'objectif C? Un certain exemple serait génial!


0 commentaires

3 Réponses :


1
votes

Hey, vous pouvez faire un appel système comme: xxx

et analyser les résultats.

Vous pouvez faire cet appel à l'aide de Système () dans c .


1 commentaires

"et analyser les résultats" Vous ne pouvez pas obtenir la sortie de System () , vous avez besoin popen () , aussi ce n'est pas c ou objet c



7
votes

La manière habituelle de le faire est de tomber dans C et d'énumérer à travers les numéros de série de processus sur le système (un retour en arrière au Pre-Mac OS X Days.) Nsworkspace a des API, mais ils ne fonctionnent pas toujours comme vous vous attendez. .

Notez que les processus classiques (sur les systèmes PowerPC) seront énumérés avec ce code (ayant des numéros de série de processus distincts), même s'ils partagent tous un ID de processus unique. P>

void DoWithProcesses(void (^ callback)(pid_t)) {
    NSArray *runningApplications = [[NSWorkspace sharedWorkspace] runningApplications];
    for (NSRunningApplication *app in runningApplications) {
        pid_t pid = [app processIdentifier];
        if (pid != ((pid_t)-1)) {
            callback(pid);
        }
    }
}


3 commentaires

getNextProcess () est maintenant obsolète sur 10.9


J'ai écrit cela avant la sortie de 10.9. ;) Je vais le mettre à jour.


@JonathangRynspan Lesplications RenundApplications apportent une manière moins de processus que le «PS -a» par exemple (ou l'ancienne propriété NextProcess () pour cette affaire). Existe-t-il un moyen de persuader Nsworkspace d'apporter des processus terminaux - moins? Et sinon, existe-t-il une autre solution programmatique à ce sujet, sans reprocher à un NASTASK pour avoir exécuté le bon vieux 'ps'?



4
votes

Vous pouvez utiliser la commande BSD Sysctl routine ou PS pour obtenir une liste de tous les processus BSD.Avez un look sur https: // Stackoverflow .COM / A / 18821357/944634


0 commentaires