¿Cómo puedo obtener una lista completa de procesos en Solaris, sin líneas truncadas?

57

¿Hay alguna manera de generar una lista completa de procesos en Solaris, sin líneas truncadas? He probado el pscomando, con los siguientes argumentos:

  -f Genera una lista completa. (Ver abajo para
                      importancia de las columnas en una lista completa
                      En g.)
  -l Genera una lista larga. (Vea abajo.)

Entonces, ambos parecen hacer lo que quiero, sin embargo, más abajo en la página man de ps, encuentro esto:

 
 args El comando con todos sus argumentos como un
                         cuerda. La implementación puede truncarse
                         este valor al ancho del campo; es
                         depende de la implementación si alguna
                         se produce un truncamiento adicional. Está
                         sin especificar si la cadena
                         representada es una versión del argumento
                         lista como se pasó al comando
                         cuando comenzó, o es una versión del
                         argumentos ya que pueden haber sido modificados
                         por la aplicación Las aplicaciones no pueden
                         depender de poder modificar su
                         lista de argumentos y tener esa modificación
                         ción se reflejará en la salida de ps.
                         La implementación de Solaris limita la
                         cadena a 80 bytes; la cuerda es el
                         versión de la lista de argumentos tal como estaba
                         pasó al comando cuando comenzó.

Lo que básicamente dice que la salida se va a truncar y no hay nada que pueda hacer al respecto. Entonces, voy a venir aquí. Seguramente otras personas se han topado con este problema y tal vez incluso tienen una solución. Supongo que ps no puede hacerlo, por lo que necesito usar otras herramientas para hacerlo. ¿Es eso exacto?

gabe
fuente
¿Estás hablando del pscomando? Si es así, actualice la pregunta para que quede más clara.
phunehehe
Sí, lo siento ... mi retoque inicial fue con el comando ps, hice la pregunta más clara.
Gabe.

Respuestas:

63

tu podrías intentar

pargs <PID>

esto te da una lista de todos los argumentos

o de lo contrario usar otra ps. Si se ejecuta como root (o cualquier usuario con suficientes privilegios para el caso)

/usr/ucb/ps auxww

te dará todos los argumentos. Es parte de SUNWscpu, "Compatibilidad de fuente, (Usr)"

Marcel G
fuente
pargsmuestra la copia en proceso de los argumentos de la línea de comando (y opcionalmente el entorno). Es bueno saberlo, gracias!
Gilles 'SO- deja de ser malvado'
1
todo este directorio / usr / ucb es nuevo para mí ... ¡me gusta!
Gabe.
3
En Solaris 11, si usa opciones sin guión (como "/ usr / bin / ps auxwww"), se tratarán como opciones de estilo UCB, y la salida mostrará líneas extra largas, incluso cuando NO se esté ejecutando como root. Esto no está bien publicitado. Ver también: superuser.com/questions/148271/ps-command-in-solaris
Chris Quenelle el
14

El núcleo no es necesario para realizar un seguimiento de los argumentos de la línea de comandos. Cuando se inicia un programa a través de la execvellamada, el núcleo debe copiar los argumentos en la memoria del proceso (para que estén disponibles como argven un programa en C, por ejemplo). Después de eso, el núcleo puede descartar la memoria utilizada para almacenar los argumentos iniciales de la línea de comandos. El proceso puede sobrescribir su copia de los argumentos. Por lo tanto, simplemente no puede haber rastro de los argumentos.

Algunas variantes de Unix guardan una copia de los argumentos de alguna forma. Solaris expone algunos datos en /proc/$pid. A partir de OpenSolaris 2009.06, el único rastro de los argumentos está en /proc/$pid/psinfo, donde se concatenan con espacios intermedios (por lo que no puede distinguir entre foo "one" "two"y foo "one two") y la cadena resultante se trunca a 80 bytes. Este campo en /proc/$pid/psinfoes lo que se psimprime en la argscolumna.

Por cierto, las opciones -fy -lcontrolan qué campos se imprimen, no si los campos se truncan en algún ancho.

Gilles 'SO- deja de ser malvado'
fuente
Esta fue una buena respuesta también, muy informativa. El comando pargs satisfizo mejor mi necesidad, que es la única razón por la que seleccioné esa respuesta sobre esta.
Gabe.
66
Entonces, una vez más nos sentamos aquí en el año 2013 y aún truncamos las cadenas a 80 bytes porque solo teníamos terminales de 80 caracteres en la década de 1970 y "algunos" programas aún no han entendido el hecho de que la vida ha seguido adelante. ¡Y nos gusta, alabamos esto como "compatibilidad"! Deberíamos estar avergonzados de nosotros mismos ...
Manjabes
1
@Manjabes jaja! Las personas que eligen seguir usando Solaris no deberían quejarse de que el sistema haga las cosas a la antigua usanza ;-) Solaris es intencionalmente lento para cambiar, para ser más retrocompatible con los programas más antiguos que esperan cierto comportamiento. Si desea un sistema operativo con una lista de ps más larga y capacidades más sofisticadas en los programas de utilidad, puede usar Linux en su lugar.
JohnGH
2

ps -eda la lista de todos los procesos en ejecución. También hay esto ps -elf.

ari
fuente
2
Incluso el uso del argumento -l todavía trunca la información de la línea de comando
Lars Nordin
1
No es una respuesta a la pregunta.
Konrad Gajewski
0

Dependiendo del pscomando que uses, yo uso

ps -auxw
Wes
fuente
1
La versión de ps en Solaris que utiliza argumentos auxw no requiere un '-' inicial. Si no está en Solaris, su respuesta no es relevante.
JohnGH
0

prstat le dará los procesos actualmente en ejecución junto con sus pids y la utilización de la CPU.

user41052
fuente