Procesos
Propiedades de los procesos
Básicamente, un proceso tiene estas propiedades:
Un número identificador, (Process ID o PID), identificador de proceso. Es necesario para referirnos a un proceso en concreto de los varios en ejecución.
Un PPID (Identificador del proceso padre), es el número que indica qué proceso creó al proceso en cuestión.
Un estado; habrá momentos en los que un proceso seguirá existiendo en el sistema, pero no estará haciendo nada realmente. Puede estar esperando a que una SEÑAL le sea enviada (sobre lo que trataremos más tarde) para volverse activo, o a nosotros como usuarios nos puede interesar detenerlo o pausarlo bajo determinadas circunstancias. Los estados más importanes son dormido (S), y en ejecución ®.
Un dueño, generalmente es el usuario que lo ejecutó, y como ya se dijo, el proceso hereda los permisos del usuario de cara al sistema de ficheros. Si un ejecutable es SUID, al ejecutarse, el proceso resultante adquiere los permisos del usuario dueño del archivo. Generalmente, un usuario normal no puede ejercer control sobre procesos que no le pertenecen.
Una prioridad que determina su importancia. Ya vimos que no todos los procesos eran igual de importantes. Veremos cómo cambiar la prioridad de un proceso más adelante.
Mostrando los procesos en ejecución y sus propiedades. Para empezar, podemos ver las tareas y sus subtareas en una estructura anidada mediante el comando pstree. Al ejecutarlo, veremos algo como:
- pstree
init-±5*[agetty]
|-bdflush
|-cron
|-devfsd
|-eth0
|-gdm---gdm-±X
| –gdmgreeter
|-keventd
|-khubd
|-kreiserfsd
|-kscand
|-ksoftirqd_CPU0
|-kswapd
|-kupdated
|-login---bash---pstree
–syslog-ng
Asimismo, pstree -p muestra entre paréntesis el número identificador (PID) de los procesos, algo muy importante cuando queremos pasar de actuar de forma pasiva a interactuar con los procesos, cosa que normalmente haremos señalando sus PIDs.
Aunque esta información estructurada resulta interesante, existen dos programas muy conocidos - cada cual más avanzado - que muestran una cantidad ingente de información sobre los procesos, estos son ps y top.
ps muestra una lista de los procesos en ejecución. Prueba ps u , que muestra los procesos que pertenecen al usuario actual. La combinación más habitual de opciones es ps aux , que muestra información detallada de todos los procesos en ejecución. Algunos de los campos más importantes mostrados por ps son:
USER - usuario dueño del proceso.
PID - número identificador del proceso.
%CPU - porcentaje de uso del microprocesador por parte de este proceso.
%MEM - porcentaje de la memoria principal usada por el proceso.
VSZ - tamaño virtual del proceso (lo que ocuparía en la memoria principal si todo él estuviera cargado, pero en la práctica en la memoria principal sólo se mantiene la parte que necesita procesarse en el momento).
RSS - tamaño del proceso en la memoria principal del sistema (generalmente son K Bytes?, cuando no lo sea, se indicará con una M detrás del tamaño).
TTY - número de terminal (consola) desde el que el proceso fue lanzado. Si no aparece, probablemente se ejecutó durante el arranque del sistema.
STAT - estado del proceso.
START - cuándo fue iniciado el proceso.
TIME - el tiempo de CPU (procesador) que ha usado el proceso.
COMMAND - el comando que inició el proceso.
La página del manual de Linux sobre ps es especialmente útil. Informa sobre otras opciones y propiedades de los procesos en detalle.
Al fin y al cabo, lo que ps nos muestra es una “instantánea” de los procesos del sistema en el momento que ejecutamos el comando, así que a priori no podremos ver la evolución.
top es la versión interactiva de ps, y tiene algunas utilidades interesantes añadidas. Si lo ejecutamos en una terminal y sin opciones, aparecerá arriba información del sistema: usuarios, hora, información del tiempo de funcionamiento de la máquina, número de procesos, uso de CPU, uso de memoria (nótense las considearciones que hicimos previamente sobre la gestión de memoria en Linux), y uso del swap. A continuación tenemos una lista de procesos similar a la que nos mostraba ps con la diferencia de que esta se actualiza periódicamente, permitiéndonos ver la evolución del estado de los procesos.
Con top, tenemos dos posibilidades de especificar opciones, bien en línea de comandos en el shell, o bien interactivamente (mientras está en ejecución y sin salir de él). La página del manual de top es también muy buena, con descripciones detalladas de los campos y de las opciones, tanto de línea de comandos como interactivas. Léela y prueba las distintas opciones.
- top
22:22:19 up 1 day, 9:41, 4 users, load average: 0.13, 0.06, 0.02 78 processes: 77 sleeping, 1 running, 0 zombie, 0 stopped CPU states: 1.4% user, 3.6% system, 0.0% nice, 95.0% idle Mem: 256192K total, 251776K used, 4416K free, 31684K buffers Swap: 409648K total, 7112K used, 402536K free, 115516K cached
- PID USER PRI NI SIZE RSS SHARE STAT MEM TIME COMMAND
414 root 14 −10 59416 25M 8772 S< 0.9 10.3 3:12 X Free 86?
2131 usuario 19 0 1052 1052 820 R 0.7 0.4 0:00 top
2129 usuario 14 0 6968 6968 4364 S 0.5 2.7 0:00 xmms
618 usuario 11 0 3988 3988 2408 S 0.3 1.5 0:15 sawfish
2130 usuario 11 0 6968 6968 4364 S 0.3 2.7 0:00 xmms
6 root 10 0 0 0 0 SW 0.1 0.0 1:31 kupdated
2085 usuario 10 0 6968 6968 4364 S 0.1 2.7 0:12 xmms
1 root 9 0 472 432 412 S 0.0 0.1 0:06 init
2 root 9 0 0 0 0 SW 0.0 0.0 0:00 keventd
3 root 19 19 0 0 0 SWN 0.0 0.0 0:07 ksoftirqd_CPU0
4 root 9 0 0 0 0 SW 0.0 0.0 0:10 kswapd
5 root 9 0 0 0 0 SW 0.0 0.0 0:19 bdflush
50 root 9 0 0 0 0 SW 0.0 0.0 0:00 khubd
84 root 9 0 0 0 0 SW 0.0 0.0 0:00 kreiserfsd
109 root 9 0 0 0 0 SW 0.0 0.0 0:00 eth1
190 root 9 0 608 604 488 S 0.0 0.2 0:01 syslogd
193 root 9 0 1248 1240 408 S 0.0 0.4 0:00 klogd
196 root 9 0 2816 2776 1728 S 0.0 1.0 0:00 named
199 root 9 0 2816 2776 1728 S 0.0 1.0 0:01 named