AnteriorPosterior

4.3. Los Procesos

  Curso: Linux y bash, por Javier Hernández

Comandos para operaciones con procesos

Cada vez que ejecutas un programa, lo que estás haciendo para el ordenador internamente es lanzando lo que se conoce como un "proceso" que no es más que el nombre que recibe un programa en tiempo de ejecución (cuando se está ejecutando).


Listando procesos

Comando: ps
Etimologia: proceso (process)
Sintaxis: ps [-feautd]
Este comando visualiza la lista de procesos que se estan ejecutando actualmente.

Parametros:
-f Información completa. UID (identificador de user), nos dice quien inició el
proceso y estime la hora del lazamiento del proceso.

-e Muestra todos los procesos que se están ejecutando, no solo los que
lanzamos nosotros. Por tanto también se muestran los llamados demonios (procesos que se ejecutan en segundo plano). También se muestran los procesos llamados "lideres de grupo de proceso" estos son procesos que solo sirven para que se ejecuten otros procesos.

-d igual que el anterior pero no muestra los lideres de grupo.

-a
Solo lista procesos relacionados con el terminal

-u Visualiza que es lo que hace un usuario

-t
visualiza que es lo que hace un terminal

Ejemplo:
ps

PID TT STAT TIME COMMAND
24 3 S 0:03 (bash)
161 3 R 0:00 ps

Haber, la información que nos muestra es esta. Donde PID (identificador de proceso). Cada proceso es identificado con un numero y el sistema lo reconoce como tal.
En la columna command se encuentra el nombre del proceso que se esta ejecutando.
Bash, es el shell o interprete de comandos usado por linux.
Lógicamente el bash se ejecutara siempre concurrentemente con el comando que lancemos.


Comprobando el estado de un proceso

Comando: jobs
Sintaxis: jobs [-lrs]
Parámetros:
-l Visualiza el PID (identificador de proceso) de cada proceso.
-r Visualiza los procesos que se encuentran en estado de ejecución (running)
-s Visualiza los procesos que están en estado suspendido (stopped).


Eliminando procesos

Comando: kill
Etimología: kill (matar, eliminar, asesinar)
Sintaxis: kill [señal] [n]
Este comando toma como argumento un numero de tarea o un PID (process identifier).
En el caso de que recurramos a no pasarle el PID y si la tarea debemos anteponer
al numero de la tarea el signo del tanto-porciento "%".

Ejemplo
: kill %1
Eliminamos la tarea numero 1

Ejemplo: kill 156
Eliminaremos el proceso con el PID numero 156.


Parada y relanzamiento de tareas

Hay otra manera de poner una tarea en segundo plano. Puedes lanzarlo como un proceso normal (en primer plano), pararlo, y después relanzarlo en segundo plano.
Primero, lanza el proceso yes en primer plano como lo harías normalmente:

/home/merovingio# yes > /dev/null

De nuevo, dado que yes corre en primer plano, no debe retornar el prompt de la
shell. Ahora, en vez de interrumpir la tarea con Ctrl-C, suspenderemos la
tarea. El suspender una tarea no la mata: solamente la detiene temporalmente
hasta que tu la retomes. Para hacer esto debes pulsar la tecla de suspender, que suele ser Ctrl-Z.

/home/merovingio#_yes > /dev/null
Ctrl-Z
[1]+ Stopped yes >/dev/null
/home/merovingio#

Mientras el proceso está suspendido, simplemente no se esta ejecutando. No gasta tiempo de CPU en la tarea. Sin embargo, puedes retomar el proceso de nuevo como si nada hubiera pasado. Continuará ejecutandose donde se dejó. Para relanzar la tarea en primer plano, usa el comando fg (del inglés "foreground").

/home/merovingio# fg
yes >/dev/null

La shell muestra el nombre del comando de nuevo, de forma que tenga conocimiento de que tarea es la que has puesto en primer plano. Para la
tarea de nuevo, con Ctrl-Z. Esta vez utiliza el comando bg para poner la
tarea en segundo plano. Esto hará que el comando siga ejecutandose igual que si
lo hubieses hecho desde el principio con "&" como en la sección anterior.

/home/merovingio# bg
[1]+ yes >/dev/null &
/home/merovingio#

Y tenemos de nuevo el prompt. El comando jobs debería decirnos que yes se está
ejecutando, y podemos matar la tarea con kill tal y como lo hicimos antes.
¿Cómo podemos parar la tarea de nuevo? Si pulsas Ctrl-Z no funcionará, ya que el
proceso está en segundo plano. La respuesta es poner el proceso en primer plano
de nuevo, con el comando fg, y entonces pararlo. Como puedes observar podrás usar fg tanto con tareas detenidas, como con las que estén segundo plano. Hay una gran diferencia entre una tarea que se encuentra en segundo plano, y una que se encuentra detenida. Una tarea detenida es una tarea que no se está ejecutando, es decir, que no usa tiempo de CPU, y que no está haciendo ningún trabajo (la tarea aun ocupa un lugar en memoria, aunque puede ser volcada a disco). Una tarea en segundo plano, se está ejecutando, y usando memoria, a la vez que completando alguna acción mientras haces otro trabajo. Sin embargo, una terea en segundo plano puede intentar mostrar texto en la terminal, lo que puede resultar molesto si estás intentando hacer otra cosa. Por ejemplo, si usaste
el comando:

/home/merovingio# yes &

sin redirigir stdout a /dev/null, una cadena de yes se mostrarán en tu monitor,
sin modo alguno de interrumpirlo (no puede hacer uso de Ctrl-C para interrumpir tareas en segundo plano). Para poder parar esas interminables yes, tendría que usar el comando fg para pasar la tarea a primer plano, y entonces usar Ctrl-C para matarla. Otra observación. Normalmente, los comandos "fg" y "bg" actuan sobre el último proceso parado (indicado por un "+" junto al número de tarea cuando usa el comando jobs). Si tienes varios procesos corriendo a la vez, podrás mandar a primer o segundo plano una tarea especifica indicando el ID de tarea como argumento de fg o bg, como en:

/home/merovingio# fg %2
(para la tarea de primer plano número 2), o

/home/merovingio# bg %3
(para la tarea de segundo plano número 3). No se pueden usar los ID de proceso
con fg o bg.

Además de esto,si usa el número de tarea por si solo, como
/home/merovingio# %2

es equivalente a
/home/merovingio# fg %2

Solo recordar que el uso de control de tareas es una utilidad de la shell. Los
comandos fg, bg y jobs son internos de la shell. Si por algún motivo utilizas una shell que no soporta control de tareas, no esperes disponer de estos comandos. Y además, hay algunos aspectos del control de tareas que difieren entre Bash y Tcsh. De hecho, algunas shells no proporcionan ningún control de tareas sin embargo, la mayoría de las shells disponibles para Linux soportan control de tareas.

Actualizado el: 26-11-2006 02:42

AnteriorPosterior