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

57

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 pscommande 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-là semblent faire ce que je veux, cependant, plus bas dans la page de manuel ps, je trouve ceci:

 
 args La commande avec tous ses arguments en tant que
                         chaîne. L'implémentation peut tronquer
                         cette valeur à la largeur du champ; c'est
                         dépendant de la mise en œuvre, que
                         une troncature supplémentaire se produit. Il est
                         non spécifié si la chaîne
                         représenté est une version de l'argument
                         liste comme il a été passé à la commande
                         quand il a commencé, ou est une version de la
                         arguments comme ils peuvent avoir été modifiés
                         par l'application. Les applications ne peuvent pas
                         dépendent de pouvoir modifier leur
                         liste d'arguments et ayant cette modification
                         être reflété dans la sortie de ps.
                         L’implémentation Solaris limite la
                         chaîne à 80 octets; la ficelle est la
                         version de la liste d'arguments telle qu'elle était
                         passé à la commande quand il a commencé.

Ce qui indique essentiellement que la sortie va être tronquée et que je ne peux rien y faire. Donc, je viens ici. D'autres personnes ont sûrement rencontré ce problème et ont peut-être même un moyen de le contourner. J'imagine que ps ne peut pas le faire et que je dois donc utiliser d'autres outils pour le faire. Est-ce exact?

gabe.
la source
Parlez-vous de la pscommande? Dans l'affirmative, veuillez mettre à jour la question afin qu'elle soit plus claire.
Phunehehe
Ouais, désolé ... mon premier bricolage était avec la commande ps, j'ai clarifié la question.
Gabe.

Réponses:

63

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 n'importe quel utilisateur avec suffisamment de privilèges)

/usr/ucb/ps auxww

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

Marcel G
la source
pargsaffiche la copie en cours de traitement des arguments de la ligne de commande (et éventuellement de l'environnement). Bon à savoir, merci!
Gilles, arrête d'être méchant
1
tout ce répertoire / usr / ucb est nouveau pour moi ... je l’aime!
Gabe.
3
Sous Solaris 11, si vous utilisez des options sans tiret (telles que "/ usr / bin / ps auxwww"), elles seront traitées comme des options de style UCB et la sortie affichera des lignes extra-longues, même si vous n'exécutez PAS en tant que root. Ce n'est pas bien annoncé. Voir aussi: superuser.com/questions/148271/ps-command-in-solaris
Chris Quenelle
14

Le noyau n'est pas obligé de suivre les arguments en ligne de commande. Lorsqu'un programme est lancé via l' execveappel, le noyau doit copier les arguments dans la mémoire de processus (afin qu'ils soient disponibles comme argvdans 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é à écraser sa copie des arguments. Il se peut donc qu'il n'y ait aucune trace d'arguments.

Certaines variantes Unix conservent une copie des arguments sous une forme ou une autre. Solaris expose des données dans /proc/$pid. Depuis OpenSolaris 2009.06, la seule trace des arguments est in /proc/$pid/psinfo, où ils sont concaténés avec des espaces (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 /proc/$pid/psinfoest ce qui est psimprimé dans la argscolonne.

Par ailleurs, les options -fet -lcontrôlent les champs à imprimer, et non leur caractère tronqué.

Gilles, arrête de faire le mal
la source
C'était aussi une bonne réponse, très informative. La commande pargs répondait mieux à mes besoins, raison pour laquelle j'ai choisi cette réponse plutôt que celle-ci.
Gabe.
6
Donc, encore une fois, nous sommes assis ici en 2013 et nous tronquons encore les chaînes à 80 octets, car nous n'avions que des terminaux à 80 caractères dans les années 1970 et "certains" programmes doivent encore comprendre que la vie a évolué. Et nous l’aimons bien, nous l’appelons "compatibilité"! Nous devrions avoir honte de nous-mêmes ...
Manjabes le
1
@Manjabes haha! Les personnes qui choisissent de continuer à utiliser Solaris ne doivent pas se plaindre de ce que le système fonctionne à l'ancienne ;-) Solaris est volontairement lent à changer pour être plus compatible avec les anciens programmes qui supposent certains comportements. Si vous voulez un système d'exploitation avec une liste de ps plus longue et des fonctionnalités plus sophistiquées dans les programmes utilitaires, vous pouvez utiliser Linux à la place.
JohnGH
2

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

ari
la source
2
Même en utilisant l'argument -l, les informations en ligne de commande sont toujours tronquées
Lars Nordin
1
Pas une réponse à la question.
Konrad Gajewski
0

En fonction de la pscommande que vous utilisez, j'utilise

ps -auxw
Nous s
la source
1
La version de ps sur Solaris qui utilise les arguments auxw ne nécessite pas de "-" si vous n'êtes pas sous Solaris, votre réponse n'est pas pertinente.
JohnGH
0

prstat vous donnera les processus en cours d'exécution avec leurs pids et l'utilisation du processeur.

utilisateur41052
la source