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?
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)"
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
.
En fonction de la commande ps
que vous utilisez, j'utilise
ps -auxw
prstat
vous donnera les processus en cours d'exécution ainsi que leurs pids et l'utilisation du CPU.