next up previous contents index
Siguiente: Parando y relanzando tareas Subir: Control de tareas. Anterior: Tareas y procesos.   Índice General   Índice de Materias

Primer plano y segundo plano.

Las tareas pueden estar tanto en primer plano como en segundo plano. Sólo puede haber una tarea en primer plano cada vez. La tarea que está en primer plano es aquella con la que se interactúa--recibe la entrada desde el teclado y envía la salida a la pantalla, a menos que, por supuesto, se haya redireccionado la entrada o la salida, como se describe en la página [*]). Por otro lado, las tareas que están en segundo plano no reciben entradas desde el terminal--en general, se ejecutan tranquilamente sin necesidad de interacción.

Algunas tareas tardan mucho tiempo en acabar y no hacen nada interesante mientras se están ejecutando. Compilar programas es una de esas tareas, como también lo es comprimir un fichero grande. No hay ningún motivo para estar sentado y aburrido mientras espera a que estas tareas acaben; simplemente ejecútelos en segundo plano. Mientras esas tareas corren en segundo plano, existe libertad para ejecutar otros programas.

Las tareas también pueden ser suspendidas. Una tarea suspendida es una tarea que está detenida temporalmente. Después de suspender una tarea, se puede hacer que continúe en primer o segundo plano cuando haga falta. Reanudar una tarea suspendida no cambia el estado de la tarea de ninguna manera--la tarea continúa su ejecución por donde se quedó.

Suspender una tarea no es lo mismo que interrumpirla. Cuando se interrumpe un proceso en ejecución (pulsando la tecla de interrupción, que suele ser Ctrl-C)3.3, se mata ese proceso, para siempre. Una vez que se mata el proceso, no hay manera de que se reanude. Hay que ejecutar la orden otra vez. Además, algunos programas capturan la interrupción, de manera que pulsar Ctrl-C no matará inmediatamente al proceso. Esto permite al programa llevar a cabo cualquier operación de limpieza necesaria antes de salir. De hecho, algunos programas no permitirán de ningún modo que se les mate mediante interrupción.

Comencemos con un ejemplo simple. La orden yes es una orden inútil en apariencia que manda una cadena infinita de ys a la salida estándar. (En realidad sí es útil. Si se enlaza mediante una tubería la salida de yes a otra orden que realice una serie preguntas de sí o no, la cadena de ys confirmará todas las preguntas.)

Intentémoslo:
\begin{tscreen}
/home/larry\char93  yes \\
y \\
y \\
y \\
y \\
y
\end{tscreen}
Las ys continuarán ad infinitum. Puede matar el proceso pulsando la tecla de interrupción, que normalmente es Ctrl-C. Para que no tengamos que aguantar la molesta cadena de ys, redirijamos la salida estándar de yes a /dev/null. Si recuerda, /dev/null actúa como un ''agujero negro'' para los datos. Cualquier dato que se le envíe desaparece. Es un modo muy efectivo de silenciar un programa charlatán.
\begin{tscreen}
/home/larry\char93  yes $>$\ /dev/null
\end{tscreen}
Ah, mucho mejor. No aparece nada, pero el símbolo del intérprete de órdenes no vuelve. Esto es porque yes está todavía en ejecución, y está mandando esas inútiles ys a /dev/null. Para matar otra vez, la tarea, pulse la tecla de interrupción.

Supongamos que quiere que la orden yes continúe su ejecución pero conservando el símbolo del intérprete de órdenes para que pueda trabajar en otras cosas. Puede pasar yes a segundo plano, permitiendo su ejecución, sin necesidad de interactuar.

Una manera de poner un proceso en segundo plano es añadir un ''&'' al final de la orden.
\begin{tscreen}
/home/larry\char93  yes $>$\ /dev/null \& \\
\verb+[1] 164+ \\
/home/larry\char93
\end{tscreen}
Como puede ver, el símbolo del intérprete de órdenes ha vuelto. Pero ¿qué es este ''[1] 164''? Y ¿está ejecutándose realmente la orden yes?

''[1]'' representa el número de tarea para el proceso yes. El intérprete de órdenes asigna un número de tarea a cada tarea en ejecución. Dado que yes es la única tarea que estamos ejecutando, tiene asignado el número de trabajo 1. ''164'' es el identificador de proceso, o PID, el número otorgado a la tarea por el sistema. Se puede usar cualquiera de los números para referirse a la tarea, como se verá más adelante.

Ahora tenemos el proceso yes ejecutándose en segundo plano, mandando continuamente una cadena de ys a /dev/null. Para comprobar el estado de este proceso, utilizamos la orden interna del intérprete de órdenes jobs.
\begin{tscreen}
/home/larry\char93  jobss \\
\verb-[1]+ Running yes >/dev/null &- \\
/home/larry\char93
\end{tscreen}
Efectivamente, ahí está. También se podría haber utilizado la orden ps tal y como se mostró arriba para comprobar el estado de la tarea.

Para acabar con la tarea, utilice la orden kill. Esta orden toma un número de tarea o un identificador de proceso como argumento. Ésta era la tarea número 1, así que usando la orden
\begin{tscreen}
/home/larry\char93  kill \%1
\end{tscreen}
se mata la tarea. Cuando se identifica la tarea con su número de tarea, se debe anteponer al número un carácter de tanto por ciento (''%'').

Ahora que ha matado la tarea, utilice jobs otra vez para comprobarlo:
\begin{tscreen}
/home/larry\char93  jobs
\begin{verbatim}[1]+ Terminated yes >/dev/null\end{verbatim}/home/larry\char93
\end{tscreen}
Desde luego, la tarea está muerta, y si utiliza la orden jobs otra vez, no debería aparecer ya nada.

También se puede matar la tarea usando el número de identificación del proceso (PID), que aparece junto con el número de tarea cuando lo arranca. En nuestro ejemplo, el identificador de proceso es 164, así que la orden
\begin{tscreen}
/home/larry\char93  kill 164
\end{tscreen}
equivale a
\begin{tscreen}
/home/larry\char93  kill \%1
\end{tscreen}
No necesita usar ''%'' para hacer referencia a una tarea mediante su identificador de proceso.


next up previous contents index
Siguiente: Parando y relanzando tareas Subir: Control de tareas. Anterior: Tareas y procesos.   Índice General   Índice de Materias
Ismael Olea 2002-09-26