Puis-je utiliser GNU ps sur OS X?

18

Nous pouvons installer GNU coreutils via brew. Mais il n'y a pas psde problème . Pouvons-nous utiliser psGNU dans OS X?

J'aimerais utiliser GNU pscar il a plus d'options et de fonctionnalités.

Sanghyun Lee
la source
avez-vous essayé d'exécuter psou ps -efdans un terminal sur OSX? fonctionne pour moi sur OSX 10.7.5 sans modifications, sur deux machines différentes. C'est dans / bin / ps
jammypeach
Ouais, je sais, je voulais utiliser GNU pscar il a plus d'options et de fonctionnalités.
Sanghyun Lee
ah OK, désolé, je n'ai pas réalisé cela à partir de la question comme indiqué. Je suggère d'inclure cela quelque part, au cas où quelqu'un d'autre penserait la même chose que moi - bonne chance pour trouver une solution
jammypeach
Merci pour la suggestion. J'ai ajouté plus d'explications à ce sujet.
Sanghyun Lee

Réponses:

22

Il n'y a pas de programme ps portable. La commande ps disponible sur linux provient, comme d'autres l'ont mentionné, du package "procps". La raison pour laquelle cela ne peut pas être porté sur OSX est que les noyaux Linux et OSX n'exposent pas ces informations de la même manière. Linux utilise un pseudo-système de fichiers dans / proc, tandis qu'OSX utilise la fonction sysctl. D'autres systèmes peuvent utiliser l'un ou l'autre mécanisme mais fournir des données dans un format différent, ou peuvent nécessiter des programmes comme ps pour lire directement à partir de la mémoire du noyau.

En général, il n'y a pas de norme sur la façon dont les informations de processus sont disponibles pour des programmes comme ps et top; le programme doit donc être conçu pour un système d'exploitation spécifique. S'il manque une fonctionnalité spécifique dans le ps OSX, vous devrez trouver un autre programme qui peut le faire, ou en écrire un vous-même (regardez le manuel sysctl, en particulier KERN_PROC comme point de départ), ou modifiez le ps existant commande pour ajouter la fonction.

Alternativement, si vous pouvez obtenir ce dont vous avez besoin en analysant la sortie de la commande ps elle-même, vous pourrez peut-être écrire un programme portable - la sortie avec l' -ooption est raisonnablement fiable sur toutes les plateformes, en particulier si vous vous référez à la norme UNIX pour le noms de colonnes à utiliser.

Aléatoire832
la source
Le /procsystème de fichiers est-il la seule méthode fournie par le noyau Linux pour obtenir une liste de processus, ou existe-t-il également des appels système distincts qui fournissent ces informations?
Tanner Swett
1
@TannerSwett Je ne pense pas. Avant l'implémentation de / proc, la commande ps sur linux fonctionnait en lisant à partir de / dev / kmem et / dev / swap.
Random832
9

Non - car il n'existe pas. Quant à savoir pourquoi il n'y a pas de module intégré psdans le coreutilspaquet de GNU , voyez cette réponse sur les forums Unix et Linux.

La meilleure formule alternative disponible via Homebrew est psgrep:

psgrep est un petit script shell Bash qui recherche la liste des processus (obtenue par ps (1) ) en utilisant l'utilitaire génial grep (1) pour sa puissance.

Cela dit, vous pouvez toujours psgrepvous comporter comme le psferait OS X. Par exemple:

   OPTIONS
   -a     Search the process list using BSD's "ps aux" format. This option
          includes all users' processes in the search.

   -b     Search the process list using BSD's "ps  ux"  format  (default).
          This option only includes the running user's processes.

pgrepest également disponible via brew, qui est syntaxiquement plus proche ps, mais moins efficace que psgrep:

psgrep (1) est plus utile que pgrep (1) car non seulement il peut rechercher la liste des processus et renvoyer un PID, mais il peut donner des informations plus utiles telles que son UID, GID, l'utilisation de la mémoire / CPU, la gentillesse et tout ce qui est pris en charge par ps.


Tout est à moi.

njboot
la source
2
pgrepfait également partie des versions récentes d'OS X
nohillside
@patrix agh! bon point, confirmé:type -a pgrep pgrep is /usr/local/bin/pgrep pgrep is /usr/bin/pgrep
njboot
En passant , comme mentionné ici , le proctoolspackage de MacPorts ou Homebrew fournit pgrepet pkillc'est ce que je cherchais personnellement lorsque je me suis présenté ici.
TheDudeAbides
3

psne fait pas partie de GNU coreutils selon Wikpedia . La version fournie avec ma distribution Linux semble provenir de procps , mais il semble qu'il n'y ait pas de formule pour cela en homebrew. Il existe des formules pour pstreelesquelles vous pouvez obtenir de superbes vues d'arborescence, et c'est également htopun autre bon visualiseur de processus.

Thomas
la source