it-swarm-es.tech

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

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

 -f Genera una lista completa. (Vea a continuación la importancia 
 De las columnas en una lista completa - 
 Ing.) 
 -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 una cadena 
. La implementación puede truncar 
 Este valor al ancho del campo; depende 
 de la implementación si ocurre algún 
 truncamiento adicional. No se especifica 
 Si la cadena 
 Representada es una versión de la lista de argumentos 
 Tal como se pasó al comando 
 Cuando se inició, o si es una versión de los argumentos 
 ya que pueden haber sido modificados 
 por la aplicación. Las aplicaciones no pueden 
 Depender de poder modificar su lista de argumentos 
 Y que esa modificación - 
 Se refleje en la salida de ps. 
 La implementación de Solaris limita la 
 cadena a 80 bytes; la cadena es la versión 
 de la lista de argumentos tal como se 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?

57
gabe.

tu podrías intentar

pargs <PID>

esto te da una lista de todos los argumentos

o bien use 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)"

62
Marcel G

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 llamada execve, el núcleo debe copiar los argumentos en la memoria del proceso (para que estén disponibles como argv en 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, puede que simplemente no haya 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 están concatenados 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/psinfo es lo que ps imprime en la columna args.

Por cierto, el -f y -l opciones controlan qué campos se imprimen, no si los campos se truncan a algún ancho.

ps -e proporciona la lista de todos los procesos en ejecución. También hay este ps -elf.

2
ari

Dependiendo del comando ps que uses, yo uso

ps -auxw
0
Wes

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

0
user41052