# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

FreeBSD: comando PS no muestra todas las columnas


El otro día me encontré con un problema que me pareció realmente curioso y al cual no le encontraba ninguna explicación. En una máquina FreeBSD ejecutaba el comando ps para buscar unos procesos php y según el tamaño de la ventana de la terminal mostraba todos o no.

Con la terminal en tamaño estandar, se mostraba lo siguiente:

$ ps aux | grep php
user      4482  0.0  0.0   3352   812 pts/0    S+   19:12   0:00 grep php

En cambio, maximizando la terminal sí que aparecía el proceso correspondiente:

$ ps aux | grep php
user       2607  6.4  1.3  26176 14396 ?        S    19:15   0:03 php /home/user/script.php
user      4482  0.0  0.0   3352   812 pts/0    S+   19:12   0:00 grep php

Bueno, el problema tenía como origen en que si no le pasamos el parámetro “w” al comando ps, el número de columnas a mostrar se adecuaba al tamaño de la ventana, mientras que con w utiliza el valor por defecto de columnas, 132. En la página man encontramos lo siguiente:

     -w      Use 132 columns to display information, instead of the default
             which is your window size.  If the -w option is specified more
             than once, ps will use as many columns as necessary without
             regard for your window size.

Así que la solución, ps auxw

Linux: Listar procesos por % cpu o uso de memoria


Con estas dos secuencias de comandos podréis ver de un modo rápido y sencillo los procesos ordenados por uso (%) de CPU y memoria. Por supuesto no es necesario (ni práctico) escribir el comando completo en la shell cada vez que lo queráis ejecutar, os recomiendo crear un alias específico para cada uno de ellos.

Listar procesos por % cpu, veréis que eliminamos aquellos que usan 0.0 de CPU con sed (sed ‘/^ 0.0 /d):

ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | sed '/^ 0.0 /d'

Ejemplo:

$ ps -e -o pcpu,cpu,nice,state,cputime,args --sort pcpu | sed '/^ 0.0 /d'
%CPU CPU  NI S     TIME COMMAND
0.2   -   0 S 00:00:24 metacity
0.2   -   0 S 00:00:00 /usr/bin/python /usr/bin/terminator
0.2   -   0 S 00:00:28 gnome-screensaver
0.2   -   0 S 00:00:31 gnome-panel
4.6   -   0 S 00:08:23 /usr/bin/pulseaudio --start
7.4   -   0 S 00:13:24 /usr/X11R6/bin/X :0 -br -audit 0 -auth /var/lib/gdm/:0.Xauth -nolisten tcp vt7
7.5   -   0 S 00:04:31 rhythmbox
14.4   -   0 S 00:08:50 /usr/lib/firefox-3.5.4/firefox-3.5

Listar procesos por uso de memoria (en KB):

ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS

Ejemplo (reducido):

$ ps -e -orss=,args= | sort -b -k1,1n | pr -TW$COLUMNS
23964 gnome-panel
26168 nautilus
26256 /usr/bin/python /usr/bin/terminator
58340 /usr/X11R6/bin/X :0 -br -audit 0 -auth /var/lib/gdm/:0.Xauth -nolisten tcp vt7
58728 rhythmbox
128736 /usr/lib/firefox-3.5.4/firefox-3.5

Encontrado en pixelbeat

El comando ps: Listar y manejar procesos


Una entrada para los que se inician en el mundo Unix/Linux. El comando ps muestra por pantalla un listado de los procesos que se están ejecutando en el sistema.

Si no añadimos ningún parámetro, ps mostrará los procesos del usuario con el que estamos logueados. Por otra parte, los parámetros más básicos a conocer son los siguientes:

-aux Lista los procesos de todos los usuarios con información añadida (destacamos más abajo).

-a Lista los procesos de todos los usuarios.

-u Lista información del proceso como por ejemplo el usuario que lo está corriendo, la utilización de Cpu y memoria, etc.

-x Lista procesos de todas las terminales y usuarios

-l Muestra información que incluye el UID y el valor “nice“.

–forest – Muestra el listado procesos en un formato tipo árbol que permite ver como los procesos interactuan entre si, podría ser algo similar al comando pstree.
Ejemplo de uso del comando ps:

$ ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.3   2844  1692 ?        Ss   18:13   0:01 /sbin/init
root         2  0.0  0.0      0     0 ?        S<   18:13   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S<   18:13   0:00 [migration/0]
root         4  0.0  0.0      0     0 ?        S<   18:13   0:00 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<   18:13   0:00 [watchdog/0]
root         6  0.0  0.0      0     0 ?        S<   18:13   0:00 [migration/1]
root         7  0.0  0.0      0     0 ?        S<   18:13   0:00 [ksoftirqd/1]
root         8  0.0  0.0      0     0 ?        S<   18:13   0:00 [watchdog/1]
root         9  0.0  0.0      0     0 ?        S<   18:13   0:00 [events/0]
root        10  0.0  0.0      0     0 ?        S<   18:13   0:00 [events/1]
root        11  0.0  0.0      0     0 ?        S<   18:13   0:00 [khelper]
root        47  0.0  0.0      0     0 ?        S<   18:13   0:00 [kblockd/0]
root        48  0.0  0.0      0     0 ?        S<   18:13   0:00 [kblockd/1]
root        51  0.0  0.0      0     0 ?        S<   18:13   0:00 [kacpid]
root        52  0.0  0.0      0     0 ?        S<   18:13   0:00 [kacpi_notify]
root       128  0.0  0.0      0     0 ?        S<   18:13   0:00 [kseriod]
root       168  0.0  0.0      0     0 ?        S    18:13   0:00 [pdflush]
root       169  0.0  0.0      0     0 ?        S    18:13   0:00 [pdflush]
root       170  0.0  0.0      0     0 ?        S<   18:13   0:00 [kswapd0]
...
...
...

Podéis revisar también la entrada en la que hablaba del comando pgrep o top, pues os puede ser de utilidad, en breve hablaremos de comandos relacionados como kill, killall , pkill, etc.