26 votes

Puis-je utiliser GNU ps sur OS X?

Nous pouvons installer GNU coreutils via brew. Mais il n'y a pas de ps dans les utilitaires. Pouvons-nous utiliser gnu ps dans OS X?

J'aimerais utiliser GNU ps car il offre plus d'options et de fonctionnalités.

0 votes

Avez-vous essayé d'exécuter ps ou ps -ef dans un terminal sur OSX ? Ça marche pour moi sur OSX 10.7.5 sans aucune modification, sur deux machines différentes. C'est dans /bin/ps

0 votes

Oui, je sais, je voulais utiliser GNU ps car il a plus d'options et de fonctionnalités.

0 votes

Ah OK, désolé je n'ai pas réalisé cela à partir de la question telle qu'elle était posée. Je suggérerais d'inclure cela quelque part, au cas où quelqu'un d'autre pense comme moi - bonne chance pour trouver une solution

29voto

Random832 Points 681

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

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

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

0 votes

Est-ce que le système de fichiers /proc est le seul moyen fourni par le noyau Linux pour obtenir une liste des processus, ou existe-t-il également des appels système séparés qui fournissent ces informations?

1 votes

@TannerSwett Je ne pense pas. Avant que /proc ne soit implémenté, la commande ps sur Linux fonctionnait en lisant depuis /dev/kmem et /dev/swap.

14voto

njboot Points 8005

Non, car cela n'existe pas. Quant à pourquoi il n'y a pas de ps intégré dans le coreutils de GNU, consultez cette réponse sur les forums Unix & Linux.

La meilleure formule alternative disponible via Homebrew est psgrep:

psgrep est un petit script shell Bash qui recherche la liste des processus (telle qu'obtenue par ps(1) ) en utilisant l'outil impressionnant grep(1) pour sa puissance.

Cela dit, vous pouvez toujours utiliser psgrep pour se comporter comme le ps de OS X. Par exemple:

   OPTIONS
   -a     Rechercher la liste des processus en utilisant le format "ps aux" de BSD. Cette option
          inclut les processus de tous les utilisateurs dans la recherche.

   -b     Rechercher la liste des processus en utilisant le format "ps  ux" de BSD (par défaut).
          Cette option inclut seulement les processus de l'utilisateur en cours d'exécution.

pgrep est également disponible via brew, qui est syntaxiquement plus proche de 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 retourner un PID, mais il peut également fournir des informations plus utiles telles que son UID, GID, utilisation mémoire/CPU, priorité, et tout ce qui est supporté par ps.


Toute emphase de ma part.

2 votes

pgrep fait partie des versions récentes d'OS X aussi

0 votes

@patrix agh! bon point, confirmé: type -a pgrep pgrep est /usr/local/bin/pgrep pgrep est /usr/bin/pgrep

0 votes

Juste en passant, comme mentionné ici, le package proctools provenant de MacPorts ou Homebrew fournit pgrep et pkill, ce que je cherchais personnellement en arrivant ici.

8voto

Brian Campbell Points 101107

ps n'est pas partie des GNU coreutils selon Wikipedia. La version qui vient avec ma distribution Linux semble être de procps, mais il semble qu'il n'y ait pas de formule pour cela dans homebrew. Il y a des formules pour pstree qui peuvent vous donner de superbes vues arborescentes, et aussi htop est un autre bon visualiseur de processus.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X