CURSO DESDE 0 DE GNU/LINUX. Versión 2
Entrega 9. Continuamos con el control de tareas.
%touch me
touch: cannot touch me: permission denied
Mata que te mata.
Después de la introducción en la anterior entrega vamos a ponernos manos a la obra. Para ello vamos a ver un comando que para mi es casi totalmente inútil pero que nos servirá muy bien para las explicaciones, es el comando:
yes [string]
Este comando simplemente va a repetir lo que le indiquemos en string indefinidamente y en su defecto nos dará una ristra de 'y' si no le indicamos nada. En los manuales de los que yo aprendí ponía que era utilísimo para no tener que estar diciendo siempre que si a un comando (recordar el uso de redirección y pipes), pero, ¿realmente alguien le ve la utilidad a decir todo que si sin leer antes?.
Paro probarlo tecleemos yes y haber que pasa:
[matados2k@fortaleza curso]$ yes
y
y
y
.... |
Ya aburridos de ver 'y' sin parar lo que vamos hacer el matarlo por cansino y aburrido ;) para ello pulsamos 'Ctrl + c' y se acabo.
Como al hacer la pruebas no nos interesa estar mirando un montón de 'y' lo que haremos es redirigir la salida del comando 'yes' hacia '/dev/null' que es algo así como un agujero negro, es decir todo lo que allí mandamos desaparece (mas de uno querría un '/dev/null' en la vida real).
Enviando al segundo plano.
Ahora lo que queremos hacer es arrancar el comando yes con la redirección a '/dev/null' y arrancarlo en segundo plano consiguiendo un bonito gasto de cpu :). Para ello debemos añadir el simbolo '&' al final de la línea, como vemos en el ejemplo.
[matados2k@fortaleza curso]$ yes > /dev/null &
[1] 5064
[matados2k@fortaleza curso]$ |
Este es el resultado, volvemos a tener el prompt para nosotros y dos curiosos números. Esos dos números son las referencias a la tarea, el '[1]' representa el número de tarea y el 5064 es el identificador de proceso o PID que es ni mas ni menos el número que le asigna el sistema al proceso.
Pero ¿donde se ha metido? .
¿Y ahora que hacemos para ver que a pasado con nuestro querido comando? Pues simple, usamos unos de los comandos internos del interprete de comando, este es 'jobs' que da un listado de las tareas que tenemos en ejecución y su estado:
[matados2k@fortaleza curso]$ jobs
[1]+ Running yes >/dev/null &
[matados2k@fortaleza curso]$ |
Como veis nos indica el número de tarea, el estado (en esta caso corriendo o mejor dicho ejecutándose) y la forma en que lo llamamos.
Mas formas de matar.
Siguiendo con nuestras ganas de eliminar a 'yes' de nuestro sistema (ahora no nos vale 'Ctrl + c' ) tenemos 2 formas de hacerlo con un mismo comando, este es 'kill' que así sin mas envía una señal de fin de proceso al proceso que le indiquemos.
Para hacerlo tenemos dos formas de referenciarlo, la mas cómoda sería con el número de tarea y para ello usamos el símbolo '%' de la siguiente manera:
[matados2k@fortaleza curso]$ kill %1
[matados2k@fortaleza curso]$ |
Así que recordad para usar el número de tarea hay que usar un '%' delante y para usar el PID simplemente pondremos el PID. Así que 'kill %1' y 'kill 5064' serian equivalentes.
Y para cerciorarnos de su defunción consultamos a nuestro querido 'jobs':
[matados2k@fortaleza curso]$ jobs
[1]+ Terminado yes >/dev/null
[matados2k@fortaleza curso]$ |
Hay que destacar que 'jobs' guarda la información del proceso muerto para mostrarla 1 vez ya que si ejecutamos de nuevo 'jobs' ya nada se sabrá de la tarea muerta:
[matados2k@fortaleza curso]$ jobs
[matados2k@fortaleza curso]$ |
Parar y seguir.
Hay otra forma de mandar una tarea a segundo plano y es ejecutarla normalmente y hacerla suspenderse o dormirse, para ello usaremos la combinación de teclas ' Ctrl+z ':
[matados2k@fortaleza curso]$ yes > /dev/null
[1]+ Stopped yes >/dev/null
[matados2k@fortaleza curso]$ jobs
[1]+ Stopped yes >/dev/null
[matados2k@fortaleza curso]$ |
Para volverla a reanudar en primer plano usaremos el comando interno 'fg' (foreground) continuando la tarea justo donde se dejo (hay que recalcar que cuando una tarea esta parada no usa tiempo de cpu).
[matados2k@fortaleza curso]$ fg
yes >/dev/null
[1]+ Stopped yes >/dev/null
[matados2k@fortaleza curso]$ |
Vemos como la hemos reanudado y la hemos vuelto a parar, pero en este caso ya si que la vamos a mandar al segundo plano con el comando interno 'bg' (background) que continuara con la ejecución del comando en segundo plano.
[matados2k@fortaleza curso]$ bg
[1]+ yes >/dev/null &
[matados2k@fortaleza curso]$ |
Recapitulando.
Las tareas pueden estar en primer y segundo plano y estas pueden estar a bien ejecutándose, paradas o terminadas (muertas). Las tareas en segundo plano no pueden pararse ni eliminarlas mediante 'Ctrl + c' si no que antes hay que pasarlas a primer plano para poder realizar esto.
Una tarea parada no consume tiempo de cpu, pero sigo manteniendo la memoria que estuviese usando, simplemente espera a que se le de la oportunidad de continuar con su tarea.
Aunque una tarea en segundo plano no puede recibir nada desde el teclado si que puede enviar datos a la pantalla y puede resultar muy muy molesto.
Por ejemplo si se te hubiera ocurrido ejecutar 'yes &' no podridas detenerlo con 'Ctrl +c' o con 'Ctrl + z' ya que esta en segundo plano, pero nos esta abrumando con una ristra interminables de 'y' que no nos deja ver nuestro prompt, con lo que para remediar esto debemos teclear a ciegas 'fg' para traernos la tarea al primer plano y esta vez si la podremos parar por ese método (también podríamos haberla eliminado con un 'kill' a ciegas con su número de tarea).
Mas sobre 'fg' y 'bg'.
Estos dos comandos actúan sobre sobre el último proceso parado o creado, indicado por un '+' cuando ejecutamos 'jobs' (mirad los ejemplos anteriores). Si tuviéramos varias tareas para indicarle a 'fg' y 'bg' sobre cual actuar utilizaríamos como con 'kill' el símbolo '%' mas su número de tarea.
[matados2k@fortaleza curso]$ yes > /dev/null &
[2] 5592
[matados2k@fortaleza curso]$ yes > /dev/null &
[3] 5593
[matados2k@fortaleza curso]$ yes > /dev/null &
[4] 5594
[matados2k@fortaleza curso]$ jobs
[1] Running yes >/dev/null &
[2] Running yes >/dev/null &
[3]- Running yes >/dev/null &
[4]+ Running yes >/dev/null &
[matados2k@fortaleza curso]$ fg %2
yes >/dev/null
[2]+ Stopped yes >/dev/null
[matados2k@fortaleza curso]$ jobs
[1] Running yes >/dev/null &
[2]+ Stopped yes >/dev/null
[3] Running yes >/dev/null &
[4]- Running yes >/dev/null &
[matados2k@fortaleza curso]$ kill %1
[matados2k@fortaleza curso]$ kill %4
[1] Terminado yes >/dev/null
[matados2k@fortaleza curso]$ |
Despedida.
Y ya visto este ejemplo mas complejo terminamos con el control de tareas. En la próxima entrega veremos una colección de comandos que nos serán de gran utilidad, asta la semana que viene ;)
Agradecimientos: · Revisión del documento: karuchi (Carolina García).
Página oficial y dominio de mi propiedad http://matados2k.es
Matados'2k Usuario y moderador de foro.noticias3d.com
Matados'2k Usuario y moderador de www.sinuh.org
matados2k (arroba) gmail (punto) com
Este documento está sometido a la licencia de creative commons en su variante “Reconocimiento-NoComercial-SinObraDerivada 2.1 España” . Es de agradecer que se comunique al autor el uso de este documento en otro medio y se debe incluir de forma obligatoria este recuadro y los agradecimientos. |
Copyright © por Computer Facil ,Derechos Reservados.