2009-09-27

Manejo de Procesos

En Linux los procesos se ejecutan de dos formas, en underground o en background, la primera forma indica que es el proceso que se ejecuta normalmente y que tu puedes visualizar ejecutándose en la consola o en la panatalla, el segundo es cuando un proceso se ejecuta internamente pero que ni se visualiza o que el administrador lo envia a ejecturse sin ser visto.

Obviamente y como todo en Linux nosotros podemos no solo determinar que procesos tenemos ejecutándose underground sino en background también además de poder decidir cambiar el método de ejecución cuando deseemos, inicialmente vamos a ver como se pasa un proceso a background.

Este se hace cuando necesitas dejar por ejemplo una sincronización entre dos maquinas, este proceso puede ser tedioso verlo o no te permitiria apagar tu mauqiuna si tu lo estas enviando remoto, entonces hay dos formas la primera es escribir el comando en consola y colocarle al final el simbolo de ampersan &, que es algo así

root@localhost:~# for i in $(ls /direc);do rm -rf $i ; done &

Este comando borara uno a uno el contenido de direc (que puede ser larguisimo y no nos permite borrarlo directamente) haciendolo en background, y así puedes seguir trabajando en la consola sin problemas. El segundo método es cuando lo tienes que enviar y ya decides pasarlo a background, para esto se realiza en dos sencillos pasos, el primero es que cuando estes ejecuntando el comando le das la combinaciń de teclas Ctrl+Z, una vez se vea el simbolo del bash escribes bg y listo el comando ha pasado a background, gráficamente se ve algo como esto

root@localhost:~# for i in $(ls /direc);do rm -rf $i ; done
rm -rf /direc/prueba1
[1]+Stopped for i in $(ls /direc);do rm -rf $i ; done <--- Momento en que se da Ctrl+Z
root@localhost:~# bg
root@localhost:~#

Ahora una cosa muy útil es saber que rocesos tienes en background, pra esto en Linux existe un comado llamado jobs que nos muestra la lista de procesos que estan ejecutándose o detenidos en background, visualmente es de la siguiente forma

root@localhost:~# jobs
[1]+Running for i in $(ls /direc);do rm -rf $i ; done
[2]+Stopped rsync -pavz -progress /direc ns.destino.com:/root

Como ven en el ejemplo existen dos procesos uno en ejecudion y el otro detenido, si desean eliminar alguno de los dos es simplemente dar el siguiente comando

root@localhost:~# kill %2

En este caso 2 por que es el identificador del que deseo eliminar