Question

Je suis en train de déterminer quand un processus particulier est en cours d'exécution, en fonction de ses arguments, sous Mac OS X. Il peut y avoir plusieurs processus en cours d'exécution avec le même nom, mais seulement on aura les arguments que je cherche. Les processus ne sont pas détenus par le même utilisateur qui exécutera mon code. Ils n'ont modifié leur argv de quelque façon.

La commande « ps » montre exactement les informations que j'ai besoin. Mais je serais très préférerais ne pas avoir à frayer « ps » et analyser sa sortie.

Je l'origine essayé la solution de cette question , en utilisant sysctl, mais il se avère que ne fonctionne que pour les processus que vous possédez; voir mon autre question pour plus d'informations.

Alors, comment obtenir ps argv informations pour les processus appartenant à d'autres utilisateurs?

Était-ce utile?

La solution

Sous Mac OS X ps est setuid 0, ce qui est la façon dont il obtient l'information pour tous les processus. Vous devez exécuter en tant que root pour obtenir cette information, donc soit vous devez être setuid 0 ou exécuter votre utilitaire avec sudo.

La meilleure façon est probablement juste pour se reproduire ps et analyser la sortie, même si vous ne voulez pas vraiment;)

Autres conseils

BSD ps (utilisé sous Mac OS X) utilise kvm_getargv() pour obtenir les arguments de ligne de commande pour un processus.

Voici l'appel réel: code source ps . Recherche de kvm_getproc2.

Voir OpenBSD page de manuel pour cette famille de fonctions.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top