Comandos de gestión de procesos

    Vamos a ver los comandos con los que podemos ver el estado y atributos de los procesos y los comandos que nos permiten cambiar algunas características de los procesos.

Ejecución en background y comandos jobs, fg y bg

    Cuando ejecutamos un comando en la consola esta se queda a la espera que termine el proceso que hemos ejecutado. Podemos hacer que comience la ejecución e inmediatamente nos devuelva el control a la consola. Para ello tenemos que utilizar el operador & al final del comando.

[pcm@sal]$ firefox &
[1] 23710
[pcm@sal]$ 

    Si no hubiésemos puesto &, hasta que no cerráramos la aplicación firefox no podríamos usar la consola. Podríamos ver qué estamos ejecutando en esa consola en background con el comando jobs.

[pcm@sal]$ jobs
[1]+  Running                 firefox &
[pcm@sal]$ 

    Incluso podemos llevar una aplicación que esta corriendo en background a la consola con el comando fg dándole el número de orden asignado (el 1 en el caso del ejemplo). También podemos parar un proceso que esta en la consola pulsando Control+Z o utilizando desde otra consola el comando kill, y luego enviando el proceso a background con bg.

[pcm@sal]$fg 1
firefox

Si ahora queremos llevarlo a background de nuevo pulsaríamos Control+Z.

[1]+  Stopped                 firefox
[pcm@sal]$ bg 1
[1]+ firefox &
[pcm@sal]$

Comando ps

    Este comando nos permite ver los procesos que actualmente existen en el sistema. Es un comando con una amplia parametrización así que se aconseja  repasar la página de manual para hacernos una idea de lo que es capaz de hacer.

    La conjugación más usada es la que se indica abajo, la cual, permite visualizar por la salida estandard TODOS los procesos cargados en la RAM así como sus atributos principales.

[root@sal]# ps -ef

UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Apr07 ?        00:00:01 init [2]
root         2     1  0 Apr07 ?        00:00:02 [keventd]
root         3     1  0 Apr07 ?        00:00:00 [ksoftirqd_CPU0]
root         4     1  0 Apr07 ?        00:00:00 [ksoftirqd_CPU1]
root         5     1  0 Apr07 ?        00:00:03 [kswapd]
root         6     1  0 Apr07 ?        00:00:00 [bdflush]
root         7     1  0 Apr07 ?        00:00:03 [kupdated]
root       409     1  0 Apr07 ?        00:00:00 [knodemgrd_0]
root       541     1  0 Apr07 ?        00:00:00 [khubd]
daemon     865     1  0 Apr07 ?        00:00:00 /sbin/portmap
root       955     1  0 Apr07 ?        00:00:03 /sbin/syslogd
root       958     1  0 Apr07 ?        00:00:00 /sbin/klogd
pcm20     1026     1  0 Apr07 ?        00:00:00 /usr/sbin/famd -T 0
root      1032     1  0 Apr07 ?        00:00:00 /usr/sbin/inetd
root      1047     1  0 Apr07 ?        00:00:00 /usr/sbin/lisa
root      1150     1  0 Apr07 ?        00:00:01 /usr/sbin/nmbd -D
root      1152     1  0 Apr07 ?        00:00:00 /usr/sbin/smbd -D
root      1158  1152  0 Apr07 ?        00:00:00 /usr/sbin/smbd -D
root      1159     1  0 Apr07 ?        00:00:00 /usr/sbin/sshd
root      1168     1  0 Apr07 ?        00:00:00 /sbin/rpc.statd
root      1174     1  0 Apr07 ?        00:00:01 /usr/sbin/sensord -f daemon
daemon    1205     1  0 Apr07 ?        00:00:00 /usr/sbin/atd
root      1208     1  0 Apr07 ?        00:00:00 /usr/sbin/cron
root      1313     1  0 Apr07 ?        00:00:02 /usr/sbin/apache
root      1325     1  0 Apr07 ?        00:00:00 /usr/bin/hts -F localhost:22
root      1341     1  0 Apr07 ?        00:00:00 /usr/bin/kdm
root      1348     1  0 Apr07 tty1     00:00:00 /sbin/getty 38400 tty1
root      1349     1  0 Apr07 tty2     00:00:00 /sbin/getty 38400 tty2
root      1350     1  0 Apr07 tty3     00:00:00 /sbin/getty 38400 tty3
root      1351     1  0 Apr07 tty4     00:00:00 /sbin/getty 38400 tty4
root      1352     1  0 Apr07 tty5     00:00:00 /sbin/getty 38400 tty5
root      1353     1  0 Apr07 tty6     00:00:00 /sbin/getty 38400 tty6
root      1372  1341  0 Apr07 ?        00:14:53 /usr/X11R6/bin/X -nolisten tcp -
root      1411     1  0 Apr07 ?        00:00:02 /usr/bin/perl /usr/share/webmin/
root      1418  1341  0 Apr07 ?        00:00:00 -:0
[root@sal]# 

Comando top y htop

    Esta pareja de comandos hacen lo mismo que ps pero con un interface más vistoso, interactivo y que se refresca en tiempo real. Además, en la información de salida, además de los atributos propios de cada proceso, se adjunta un encabezamiento con datos sobre el consumo de los recursos generales del sistema (% de RAM total ocupada, % de RAM libre, % de uso de CPU, acumulados de los distintos estados de los procesos, etc...).

[root@sal]# top 
top - 01:47:25 up 1 day,  3:38,  1 user,  load average: 0.01, 0.04, 0.03
Tasks: 112 total,   1 running, 111 sleeping,   0 stopped,   0 zombie
Cpu(s):   5.6% user,   8.2% system,   0.0% nice,  86.1% idle
Mem:    516528k total,   503012k used,    13516k free,    44320k buffers
Swap:   337356k total,    13496k used,   323860k free,   165572k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 2078 pcm       19   0 14772  14m  12m S 10.6  2.8  11:37.18 kdeinit
 1372 root      12 -10 83448  73m 9228 S  3.5 14.5  14:55.90 XFree86
22682 root      19   0  1084 1084  844 R  3.2  0.2   0:00.30 top
 2086 pcm       10   0  101m  97m  23m S  1.3 19.4  21:51.38 netscape-bin
21199 pcm       12   0 30420  29m  13m S  1.3  5.9   0:10.50 java_vm
 2100 pcm       12   0  101m  97m  23m S  1.0 19.4   0:09.66 netscape-bin
 2075 pcm       11   0 18184  17m  13m S  0.6  3.5   0:21.67 kdeinit
 5012 pcm       11   0 10864  10m 4072 S  0.6  2.0   3:13.78 emacs
 8591 mysql     10   0 13600  13m 2932 S  0.6  2.6   0:48.99 mysqld
 1411 root      10   0  5744 3448 2088 S  0.3  0.7   0:02.43 miniserv.pl
 2068 pcm        9   0 12920  12m  10m S  0.3  2.4   1:35.65 kdeinit
 8153 root       9   0   944  904  796 S  0.3  0.2   0:09.22 dirmngr
 8592 mysql     10   0 13600  13m 2932 S  0.3  2.6   0:54.86 mysqld
21197 pcm        9   0 30420  29m  13m S  0.3  5.9   0:04.70 java_vm
    1 root       9   0   500  500  448 S  0.0  0.1   0:01.62 init
    2 root       9   0     0    0    0 S  0.0  0.0   0:02.30 keventd
  
[root@sal]# htop
htop

    Es muy probable que htop haya que instalarlo desde el repositorio ya que por defecto no se incluye con la instalación de la distro.

Comando pstree

    Presenta la información de los procesos cargados en las RAM con sus dependencias jerárquicas en un bonito gráfico de arbol.

Comando nice y renice

    Estos comandos nos permiten lanzar un proceso con una prioridad determinada el primero y el segundo cambiar la prioridad de un proceso.

Comando kill

    Nos permite enviar una señal a un proceso. Por defecto envía la señal de parada al PID que pongamos, de ahí su nombre, pero realmente con un parámetro podemos enviar otros tipos de señales de procesos.

[root@sal]# kill 22670
[root@sal]# 

Para ver la lista de señales soportadas por el comando podemos hacer:

[root@sal]# kill -l

 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL
 5) SIGTRAP      6) SIGABRT      7) SIGBUS       8) SIGFPE
 9) SIGKILL     10) SIGUSR1     11) SIGSEGV     12) SIGUSR2
13) SIGPIPE     14) SIGALRM     15) SIGTERM     17) SIGCHLD
18) SIGCONT     19) SIGSTOP     20) SIGTSTP     21) SIGTTIN
22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO
30) SIGPWR      31) SIGSYS      33) SIGRTMIN    34) SIGRTMIN+1
35) SIGRTMIN+2  36) SIGRTMIN+3  37) SIGRTMIN+4  38) SIGRTMIN+5
39) SIGRTMIN+6  40) SIGRTMIN+7  41) SIGRTMIN+8  42) SIGRTMIN+9
43) SIGRTMIN+10 44) SIGRTMIN+11 45) SIGRTMIN+12 46) SIGRTMIN+13
47) SIGRTMIN+14 48) SIGRTMIN+15 49) SIGRTMAX-15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7  58) SIGRTMAX-6
59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX
[root@sal]# 

Las señales más utilizadas son:

  • SIGKILL Termina el proceso, no puede ser ignorada. Se puede enviar con kill -s SIGKILL pid o kill -9 pid, que es modo estándar en otros UNIX.

  • SIGSTOP Para el proceso, no puede ser ignorada.

  • SIGTERM Se ordena al proceso que termine, el cual puede ser ignorar la señal. El la señal enviada por defecto.

Comando killall y pkill

    Con estos comandos vamos a poder enviar señales a procesos, en vez de por PID, por el nombre, con killall y por otras propiedades de los procesos como pueden ser el usuario, el GID, el proceso padre, etc, con pkill. Por ejemplo:

[pcm@sal]# ps
 4548 pts/2    00:00:00 bash
 4565 pts/2    00:00:00 gconfd-2
22780 pts/2    00:00:34 xpdf.bin
22824 pts/2    00:00:00 ps

[pcm@sal]# killall xpdf.bin
[pcm@sal]# 

Con esta acción terminaría el proceso 22780.