web-dev-qa-db-fra.com

Comment puis-je obtenir une liste complète des processus dans Solaris, sans lignes tronquées?

Existe-t-il un moyen de générer une liste complète des processus dans Solaris, sans lignes tronquées? J'ai essayé la commande ps, avec les arguments suivants:

 -f Génère une liste complète. (Voir ci-dessous pour 
 Signification des colonnes dans une liste complète - 
 Ing.) 
 -l Génère une longue liste. (Voir ci-dessous.)

Donc, ces deux semblent faire ce que je veux, cependant, plus loin dans la page de manuel ps, je trouve ceci:

 
 args La commande avec tous ses arguments sous la forme d'une chaîne 
. L'implémentation peut tronquer 
 Cette valeur à la largeur du champ; il est 
 dépendant de l'implémentation si une 
 troncature supplémentaire se produit. Il est 
 Non spécifié si la chaîne 
 Représentée est une version de la liste d'arguments 
 Telle qu'elle a été transmise à la commande 
 Lorsqu'elle a démarré, ou est une version de les arguments 
 car ils peuvent avoir été modifiés 
 par l'application. Les applications ne peuvent pas 
 Dépendre de la possibilité de modifier leur liste d'arguments 
 Et de faire en sorte que cette modification - 
 Soit reflétée dans la sortie de ps. 
 L'implémentation Solaris limite la 
 chaîne à 80 octets; la chaîne est la version 
 de la liste d'arguments telle qu'elle a été 
 transmise à la commande lors de son démarrage. 

Ce qui signifie essentiellement que la sortie va être tronquée et que je ne peux rien y faire. Alors je viens ici. Certes, d'autres personnes ont rencontré ce problème et ont peut-être même un moyen de le contourner. Je suppose que ps ne peut pas le faire et je dois donc utiliser d'autres outils pour ce faire. Est-ce exact?

57
gabe.

tu pourrais essayer

pargs <PID>

cela vous donne une liste de tous les arguments

ou bien utilisez un autre ps. Si exécuté en tant que root (ou tout utilisateur disposant de privilèges suffisants d'ailleurs)

/usr/ucb/ps auxww

vous donnera tous les arguments. Sa partie de SUNWscpu, "Compatibilité des sources, (Usr)"

62
Marcel G

Le noyau n'est pas requis pour garder une trace des arguments de la ligne de commande. Lorsqu'un programme est démarré via l'appel execve, le noyau doit copier les arguments dans la mémoire du processus (afin qu'ils soient disponibles sous la forme argv dans un programme C, par exemple). Après cela, le noyau peut supprimer la mémoire utilisée pour stocker les arguments de ligne de commande initiaux. Le processus est autorisé à remplacer sa copie des arguments. Il n'y a donc peut-être tout simplement aucune trace des arguments.

Certaines variantes Unix conservent une copie des arguments sous une forme quelconque. Solaris expose certaines données dans /proc/$pid. Depuis OpenSolaris 2009.06, la seule trace des arguments se trouve dans /proc/$pid/psinfo, où ils sont concaténés avec des espaces entre les deux (vous ne pouvez donc pas distinguer entre foo "one" "two" et foo "one two") et la chaîne résultante est tronquée à 80 octets. Ce champ dans /proc/$pid/psinfo est ce que ps affiche dans la colonne args.

Soit dit en passant, le -f et -l les options contrôlent quels champs sont imprimés, pas si les champs sont tronqués à une certaine largeur.

ps -e donne la liste de tous les processus en cours d'exécution. Il y a aussi ce ps -elf.

2
ari

En fonction de la commande ps que vous utilisez, j'utilise

ps -auxw
0
Wes

prstat vous donnera les processus en cours d'exécution ainsi que leurs pids et l'utilisation du CPU.

0
user41052