Está en la página 1de 15

UNIDAD 4.

GESTION DE PROCESOS EN LINUX


La ms simple definicin de un proceso podra ser que es una instancia de un programa en ejecucin (corriendo). A los procesos frecuentemente se les refiere como tareas. El contexto de un programa que esta en ejecucin es lo que se llama un proceso. Este contexto puede ser mas procesos hijos que se hayan generado del principal (proceso padre), los recursos del sistema que este consumiendo, sus atributos de seguridad (tales como su propietario y permisos de archivos as como roles y dems de SELinux), etc. Linux, como se sabe, es un sistema operativo multitarea y multiusuario. Esto quiere decir que mltiples procesos pueden operar simultneamente sin interferirse unos con los otros. Cada proceso tiene la "ilusin" que es el nico proceso en el sistema y que tiene acceso exclusivo a todos los servicios del sistema operativo. Programas y procesos son entidades distintas. En un sistema operativo multitarea, mltiples instancias de un programa pueden ejecutarse simultneamente. Cada instancia es un proceso separado. Por ejemplo, si cinco usuarios desde equipos diferentes, ejecutan el mismo programa al mismo tiempo, habra cinco instancias del mismo programa, es decir, cinco procesos distintos. Cada proceso que se inicia es referenciado con un nmero de identificacin nico conocido como Process ID PID, que es siempre un entero positivo. Prcticamente todo lo que se est ejecutando en el sistema en cualquier momento es un proceso, incluyendo el shell, el ambiente grfico que puede tener mltiples procesos, etc. La excepcin a lo anterior es el kernel en si, el cual es un conjunto de rutinas que residen en memoria y a los cuales los procesos a travs de llamadas al sistema pueden tener acceso.

Primer y segundo plano


Cualquier proceso puede estar en primer o segundo plano. Lo nico a tener en cuenta es que solo un proceso estar en primer plano al mismo tiempo y es con el que estemos trabajando e interactuando en ese momento. Un proceso que este en segundo plano no recibir ninguna seal de parte nuestra, es decir que no nos podemos comunicar con l a travs, por ejemplo, del teclado. La utilidad de enviar un programa a segundo plano esta dada por el hecho de que existen tareas que no requieren de nuestro control para que se ejecuten. Por ejemplo, bajar algn archivo de Internet, compilar el kernel u otro programa. Estas son tareas que pueden ser lanzadas tranquilamente en segundo plano. Para lanzar un proceso en segundo plano, tendremos que poner a continuacin del comando el smbolo &. Para ejemplificar esto usaremos el comando find y dejaremos que busque todos los archivos que existen en el disco
[shrek@pantano:~]$ find / -name "*"

Esto nos mostrara una lista bastante larga de archivos por pantalla y nos quedaramos sin el control del intrprete de comandos mientras esta ejecutndose. Podramos usar el dispositivo null, que si recuerdan era como un agujero negro donde todo lo que se enviaba a l desapareca, para redirigir la salida y que no saliera por pantalla
[shrek@pantano~]$ find / -name "*" > /dev/null

Igualmente as no contaramos con la atencin de nuestro interprete de comandos hasta que terminara el trabajo el comando find. La forma de tener la atencin del shell inmediatamente despus de lanzar el proceso find es envindolo en segundo plano
[shrek@pantano:~]$ find / -name "*" > /dev/null & [1] 192 [shrek@pantano:~]$

Como se aprecia, regres de inmediato al shell, pero antes envi un mensaje a la terminal. El [1] representa a un nmero de trabajo que el shell asigna a cada uno de los procesos que pasa a segundo plano. Inmediatamente despus vemos el nmero de PID del proceso. Podremos identificar al proceso por cualquiera de los dos nmeros mientras se encuentre en segundo plano. Para ver cuantos trabajos estn ejecutndose en este momento podemos usar el comando jobs.
[shrek@pantano:~]$ jobs [1]+ Running [shrek@pantano:~]$ find / -name "*" >/dev/null &

Podremos eliminar un proceso que se esta ejecutando con la ayuda del comando kill seguido bien sea del nmero de trabajo precedido de un signo % o del nmero de PID. De esta forma estamos matando al proceso pero puede darse el caso de que este tarde en desaparecer dado que tiene que limpiar el entorno, por esto muchas veces parecer que no nos a hecho caso. En realidad el proceso esta haciendo una limpieza del sistema evitando as el mal funcionamiento del mismo y/o una inconsistencia en los datos con que trabajaba. Como ejemplo usaremos otro comando muy tpico, el comando yes. Este comando enviar a la salida estndar continuamente la letra y. Sirve este comando para que en caso de que se requiera contestar afirmativamente a las peticiones de un programa pudiremos mediante una redireccin contestarle con un y a cada pregunta. Si lo ejecutramos sin redirigir la salida a /dev/null, nos llenara la pantalla con una columna infinita de y. Por esto lo enviaremos a segundo plano redirigiendo la salida y luego lo mataremos con el comando kill.
[shrek@pantano:~]$ yes > /dev/null & [1] 201 [shrek@pantano:~]$ kill %1 [shrek@pantano:~]$ jobs [1]+ Terminated yes > /dev/null & [shrek@pantano:~]$

Como podrn ver, en el momento en que se mando el comando kill, no hubo ningn mensaje. Solo despus de ejecutar el comando jobs se nos informo que el trabajo nmero 1 haba finalizado (TERMINATED). Podemos tambin hacer lo mismo empleando el nmero de PID con lo que obtendremos idnticos resultados.
[shrek@pantano:~]$ kill 201

Esquema de ejecucin, Tipos de procesos en Linux: Child, daemon, orphan y zombie


Los procesos son algo fundamental en un sistema operativo. Casi todas las actividades de un sistema hacen uso de procesos para llevar a cabo sus tareas. De hecho gracias a los procesos el sistema operativo est "operativo", es decir, funcionando correctamente y por un gran puado

de ellos el mismo nos tiene disponible de forma instantnea los recursos fsicos (hardware) de nuestra computadora. Es muy probable que al utilizar el comando top para visualizar los procesos activos del sistemas te hayas fijado que en la parte superior hay una lnea que dice cuntos procesos en total hay en ejecucin, cuntos estn dormidos (sleeping), detenidos (stopped) y zombie. Estas denominaciones hacen referencia a los estados de dichos procesos en un momento determinado. A continuacin describiremos los diferentes procesos por su tipo o estado. Child (hijos) Son procesos creados por otro proceso durante su ejecucin. Usualmente los procesos child son creados para ejecutar un binario desde un proceso existente, con la llamada del sistema fork(). Los procesos normalmente son creados para ejecutarse a travs de un shell o terminal. En dicho caso el shell se convierte en proceso padre y el proceso ejecutado se convierte en hijo. En sistemas tipo Unix/Linux cada proceso tiene un padre excepto el proceso init. Daemon (demonios) Son tipos especiales de procesos que se ejecutan en segundo plano y estn relacionados con el sistema operativo y no tienen shell asociado. Estos corren con permisos de root y usualmente proveen servicios. El no tener shell asociado se logra separando el proceso del shell, creando un proceso nuevo y terminando el proceso padre (el shell que lo inici). Desde el momento en que su proceso padre es terminado el proceso de hace independiente (ya no es ms un proceso child) y es tomado por el proceso init el cual lo convierte en un daemon.

Orphan (hurfanos) Usualmente un proceso crea un proceso hijo (child) y cuando el proceso hijo termina una seal es emitida al proceso padre para que pueda hacer todo lo requerido cuando el proceso hijo es terminado. Pero hay situaciones en las que los procesos padres son matados (killed). En dicho caso el proceso hijo queda hurfano y entonces es tomado por el proceso init. Aun as el

proceso cuyo padre fue matado sigue siendo llamado hurfano ya que su padre original no existe. Zombie Cuando un proceso child o hijo es terminado o es completada su ejecucin, luego su entrada en la tabla de procesos se mantiene hasta que el proceso padre obtenga la informacin del estado del proceso hijo terminado. Hasta entonces el proceso terminado entra en estado zombie y es conocido como proceso zombie. Cuando un proceso es terminado toda la memoria y recursos asociados con dicho proceso son liberados pero la entrada del mismo en la tabla de procesos an existe. Una sea SIGCHILD es enviada al proceso padre (ha sido terminado). Comnmente el manejador de esta seal en el proceso padre ejecuta una llamada de espera que obtiene el estado de salida del proceso terminado y entonces la entrada del proceso zombie es borrada de la tabla de procesos.

COMUNICACIN Y SINCRONIZACIN ENTRE PROCESOS EN LINUX


Pipes Son el mecanismo ms antiguo de IPC y lo proveen todos los sistemas Unix Proveen canal unidireccional para flujo de datos entre dos procesos Slo puede ser usado entre procesos con un antecesor comn que crea la pipe (heredando descriptores comunes).

Redireccionamiento de una Pipe a la E/S Estndar


Necesario cuando procesos se conectan a travs de la E y S estndar.

Conexin puede ser controlada por un proceso sin modificar el cdigo de programa. Para hacerlo hay que cerrar el descriptor de STDIN o STDOUT y llamar a dup o dup2

FIFO o Pipe con Nombre Similares a una pipe, pero permiten conectar procesos que no tienen ancestro comn que cre la pipe. Usa la estructura de nombres del sistema de archivos Existen en el directorio como un archivo especial de tipo FIFO.

Funcin: mkfifo
Funciona similar la creacin de un archivo con creat mode tiene igual funcin que en la funcin open Est sujeta al mismo sistema de control de acceso que un archivo (usuario y grupo dueo). FIFO creado con mkfifo puede ser luego abierto por cualquier proceso que tenga el permiso

Sistema de IPC de System V - Semforos y Memoria Compartida


Semforo. Usado para sincronizar los procesos. Segmento de memoria compartida. Permite que diferentes procesos mapean un mismo segmento a su espacio de memoria. Cola de mensajes. Permite que procesos en una mquina puedan enviar y recibir mensajes (no lo veremos en el curso).

Identificadores y Claves
Cada objeto de IPC est asociado a una estructura en el kernel que se referencia internamente por un nmero entero no negativo denominado identificador. El identificador puede cualquier nmero Al crear un objeto, se debe especificar una clave de tipo key_t.que se convierte por el kernel en el identificador para referenciar al objeto. Procesos que comparten un objeto deben conocer la clave o identificador.

Asignacin de Clave
Un objeto se crea normalmente por el servidor usando funcin XXXget. o Si clave es IPC_PRIVATE, el sistema crea un nuevo objeto usando un identificador libre. o Si se usa otro valor para clave, entonces se crea si esa clave no est asociada con objeto existente. Funcin de creacin devuelve el identificador del objeto, usado referenciarlo en otras funciones. o Si existe se produce un error.

Concepto de Semforo
Corresponde a un contador para control el acceso a un objeto de datos compartido En el acceso se verifica el valor del semforo o Si es positivo, se decrementa y retorna la funcin (operacin P) o Sino lo es, bloquea al proceso

Al salir el semforo se incrementa. Si existe un proceso bloqueado se despierta uno de ellos.

Memoria Compartida
Permite compartir una regin de memoria entre dos o ms procesos. Es la forma de IPC ms rpida Es necesario sincronizar el acceso para mantener la consistencia de los datos (normalmente se usan semforos)

Comandos para la Gestin de procesos


ps El comando ps es el que permite informar sobre el estado de los procesos. ps esta basado en el sistema de archivos /proc, es decir, lee directamente la informacin de los archivos que se encuentran en este directorio. Tiene una gran cantidad de opciones, incluso estas opciones varan dependiendo del estilo en que se use el comando. Estas variaciones sobre el uso de ps son las siguientes: Estilo UNIX, donde las opciones van precedidas por un guin Estilo BSD, donde las opciones no llevan guin Estilo GNU, donde se utilizan nombres de opciones largas y van precedidas por doble guin --

Sea cual sea el estilo utilizado, dependiendo de las opciones indicadas, varias columnas se mostrarn en el listado de procesos que resulte, estas columnas pueden ser entre muchas otras, las siguientes (y principales): p o PID P o PPID U o UID t o TT o TTY T o TIME c o CMD RSS SZ o SIZE NI Process ID, nmero nico o de identificacin del proceso. Parent Process ID, padre del proceso User ID, usuario propietario del proceso Terminal asociada al proceso, si no hay terminal aparece entonces un '?' Tiempo de uso de cpu acumulado por el proceso El nombre del programa o camndo que inici el proceso Resident Sise, tamao de la parte residente en memoria en kilobytes Tamao virtual de la imagen del proceso Nice, valor nice (prioridad) del proceso, un nmero positivo significa menos tiempo de procesador y negativo ms tiempo (-19 a 19)

C o PCPU Porcentaje de cpu utilizado por el proceso STIME S o STAT Starting Time, hora de inicio del proceso Status del proceso, estos pueden ser los siguientes R runnable, en ejecucin, corriendo o ejecutndose S sleeping, proceso en ejecucin pero sin actividad por el momento, o esperando por algn evento para continuar T sTopped, proceso detenido totalmente, pero puede ser reiniciado Z zombie, difunto, proceso que por alguna razn no termin de manera correcta, no debe haber procesos zombies D uninterruptible sleep, son procesos generalmente asociados a acciones de IO del sistema X dead, muerto, proceso terminado pero que sigue apareciendo, igual que los Z no deberan verse nunca

Las opciones completas de ps las encuentras en las pginas del manual (man ps), o escribiendo en la terminal ps L, y para ver un resumen de sus opciones ms comunes usa ps --help:
#> ps --help ********* simple selection ********* ********* selection by list ********* -A all processes -C by command name -N negate selection -G by real group ID (supports names) -a all w/ tty except session leaders -U by real user ID (supports names) -d all except session leaders -g by session OR by effective group name -e all processes -p by process ID T all processes on this terminal -s processes in the sessions given a all w/ tty, including other users -t by tty g OBSOLETE -- DO NOT USE -u by effective user ID (supports names) r only running processes U processes for specified users x processes w/o controlling ttys t by tty *********** output format ********** *********** long options *********** -o,o user-defined -f full --Group --User --pid --cols -ppid -j,j job control s signal --group --user --sid --rows -info -O,O preloaded -o v virtual memory --cumulative --format --deselect -l,l long u user-oriented --sort --tty --forest --version -F extra full X registers --heading --no-heading --context ********* misc options ********* -V,V show version L list format codes f ASCII art forest

-m,m,-L,-T,H threads -M,Z security data -w,w wide output

S c n

children in sum true command name numeric WCHAN,UID

-y change -l format -c scheduling class -H process hierarchy

A continuacin algunos cuantos ejemplos de ps con la salida recortada.


># ps PID 1 2 3 4 -e TTY ? ? ? ? (-e muestra TIME 00:00:01 00:00:00 00:00:00 00:00:00 todos los procesos) CMD init kthreadd migration/0 ksoftirqd/0 CMD init [5] [kthreadd] su -bash kio_file [kdeinit] ps -ef

#> ps -ef (-f muestra opciones completas) UID PID PPID C STIME TTY TIME root 1 0 0 10:12 ? 00:00:01 root 2 0 0 10:12 ? 00:00:00 ... root 6130 5662 0 10:24 pts/0 00:00:00 root 6134 6130 0 10:24 pts/0 00:00:00 sergon 6343 5604 0 10:28 ? 00:00:00 file /home/sergon/tmp/ksocket-sergon/kl root 6475 6134 0 10:38 pts/0 00:00:00

#> ps -eF (-F muestra opciones completas extra) UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 1 0 0 412 556 1 16:59 ? 00:00:01 init [5] root 2 0 0 0 0 1 16:59 ? 00:00:00 [kthreadd] sergon 8326 8321 0 902 1272 0 17:07 ? 00:00:00 /bin/sh /usr/lib/firefox-2.0.0.8/run-mozilla.sh /usr/lib/f sergon 8331 8326 4 53856 62604 0 17:07 ? 00:00:50 /usr/lib/firefox-2.0.0.8/mozilla-firefox-bin sergon 8570 7726 2 15211 37948 0 17:17 ? 00:00:10 quanta #> ps tty) PID 1 2 3 4 ax TTY ? ? ? ? (formato BSD sin guin, a muestra todos, x sin mostrar STAT Ss S< S< S< TIME 0:01 0:00 0:00 0:00 COMMAND init [5] [kthreadd] [migration/0] [ksoftirqd/0] muestra usuarios y dems TTY ? ? ? ? ? STAT START Ss S< S< S< S< 16:59 16:59 16:59 16:59 16:59 TIME 0:01 init 0:00 0:00 0:00 0:00

#> ps aux (formato BSD sin guin, u columnas) USER PID %CPU %MEM VSZ RSS COMMAND root 1 0.0 0.0 1648 556 [5] root 2 0.0 0.0 0 0 [kthreadd] root 3 0.0 0.0 0 0 [migration/0] root 4 0.0 0.0 0 0 [ksoftirqd/0] root 5 0.0 0.0 0 0 [migration/1]

#> ps -eo user,pid,tty (-o output personalizado, se indican los campos separados por coma, ver ps --help o ps L) USER PID TT

root root sergon root

1 2 8570 8876

? ? tty 1 pts/1

#> ps -eH (muestra rbol de procesos) #> ps axf (lo mismo en formato BSD) #> ps -ec (el comando que se esta ejecutando, sin la ruta, solo el nombre real) #> ps -el (muestra formato largo de varias columnas, muy prctico) #> ps L (No muestra procesos, lista todos los cdigos de formatos)

pstree Muestra los procesos en forma de rbol, pstree --help te da las opciones ms comunes. Recomiendo uses lo uses con la opcin -A y -G para que te un rbol con lneas con lneas estilo ASCII y de terminal VT100 respectivamente, puedes aadir tambin -u para mostrar entre parntesis al usuario propietario del proceso:
#> pstree -AGu init---acpid |-atd(daemon) |-automount----2*[{automount}] |-avahi-daemon(avahi) |-beagled(sergon)----7*[{beagled}] |-beagled-helper(sergio)----3*[{beagled-helper}] |-compiz(sergon)----kde-window-deco |-console-kit-dae----61*[{console-kit-dae}] |-crond |-dbus-daemon(messagebus) |-dbus-daemon(sergio) |-dbus-launch(sergio) |-dcopserver(sergio) |-dhclient |-gam_server(sergio) |-gconfd-2(sergio) |-hald(haldaemon)----hald-runner(root)----hald-addonacpi(haldaemon) | |-hald-addon-cpuf | |-hald-addon-inpu | |-hald-addon-stor |-httpd---8*[httpd(apache)] |-2*[ifplugd] |-ipw3945d |-kaccess(sergio) ...

kill El comando kill, que literalmente quiere decir matar, sirve no solo para matar o terminar procesos sino principalmente para enviar seales (signals) a los procesos. La seal por default (cuando no se indica ninguna es terminar o matar el proceso), y la sintaxis es kill PID, siendo PID el nmero de ID del proceso. Asi por ejemplo, es posible enviar una seal de STOP al proceso y se detendr su ejecucin, despus cuando se quiera mandar una seal de CONTinuar y el proceso continuara desde donde se quedo.

#> kill -l (lista todas las un proceso) 1) SIGHUP 2) SIGINT 5) SIGTRAP 6) SIGABRT 9) SIGKILL 10) SIGUSR1 13) SIGPIPE 14) SIGALRM 17) SIGCHLD 18) SIGCONT 21) SIGTTIN 22) SIGTTOU 25) SIGXFSZ 26) SIGVTALRM 29) SIGIO 30) SIGPWR 35) SIGRTMIN+1 36) SIGRTMIN+2 39) SIGRTMIN+5 40) SIGRTMIN+6 43) SIGRTMIN+9 44) SIGRTMIN+10 47) SIGRTMIN+13 48) SIGRTMIN+14 51) SIGRTMAX-13 52) SIGRTMAX-12 55) SIGRTMAX-9 56) SIGRTMAX-8 59) SIGRTMAX-5 60) SIGRTMAX-4 63) SIGRTMAX-1 64) SIGRTMAX

posibles seales que pueden enviarse a 3) 7) 11) 15) 19) 23) 27) 31) 37) 41) 45) 49) 53) 57) 61) SIGQUIT SIGBUS SIGSEGV SIGTERM SIGSTOP SIGURG SIGPROF SIGSYS SIGRTMIN+3 SIGRTMIN+7 SIGRTMIN+11 SIGRTMIN+15 SIGRTMAX-11 SIGRTMAX-7 SIGRTMAX-3 4) 8) 12) 16) 20) 24) 28) 34) 38) 42) 46) 50) 54) 58) 62) SIGILL SIGFPE SIGUSR2 SIGSTKFLT SIGTSTP SIGXCPU SIGWINCH SIGRTMIN SIGRTMIN+4 SIGRTMIN+8 SIGRTMIN+12 SIGRTMAX-14 SIGRTMAX-10 SIGRTMAX-6 SIGRTMAX-2

La lista previa presenta una lista de todas las posibles seales que pueden mandarse a un proceso y estas pueden ser invocadas a travs del nmero de la seal o de su cdigo, por ejemplo:
#> kill -9 11428 #> kill -SIGKILL 11428 (termina, mata un proceso completamente) (Lo mismo que lo anterior)

Las seales ms comunes son la 19 y 20 que detienen momentneamente la ejecucin de un proceso o programa, 18 la continua, 1 que es la seal de hang up que obliga al proceso a releer sus archivos de configuracin estando en ejecucin y 9 que termina rotundamente un proceso.

killall El comando killall, que funciona de manera similar a kill, pero con la diferencia de en vez de indicar un PID se indica el nombre del programa, lo que afectar a todos los procesos que tengan ese nombre. Asi por ejemplo si se tienen varias instancias ejecutndose del proxy server squid, con killall squid eliminar todos los procesos que se esten ejecutando con el nombre 'squid'
#> killall #> killall releer sus #> killall squid pero -l (lista de posibles seales) -HUP httpd (manda una seal de "colgar", detenerse archivos de configuracin y reiniciar) -KILL -i squid (manda seal de matar a todos los procesos pide confirmacin en cada uno)

nice Permite cambiar la prioridad de un proceso. Por defecto, todos los procesos tienen una prioridad igual ante el CPU que es de 0. Con nice es posible iniciar un programa (proceso) con la prioridad modificada, ms alta o ms baja segn se requiera. Las prioridades van de -20 (la ms alta) a 19 la ms baja. Solo root o el superusuario puede establecer prioridades negativas que son ms altas. Con la opcin -l de ps es posible observar la columna NI que muestra este valor.
#> nice ) (sin argumentos, devuelve la prioridad por defecto

0 #> nice -n -5 comando (inicia comando con una prioridad de -5, lo que le da ms tiempo de cpu)

renice Asi como nice establece la prioridad de un proceso cuando se incia su ejecucin, renice permite alterarla en tiempo real, sin necesidad de detener el proceso.
#> nice -n -5 yes (se ejecuta el programa 'yes' con prioridad -5) (dejar ejecutando 'yes' y en otra terminal se C PRI 4 75 NI ADDR SZ WCHAN TTY -5 708 write_ pts/2 TIME CMD 00:00:00 yes

analiza con 'ps') #> ps -el F S UID PID PPID 4 S 0 12826 12208

#> renice 7 12826 12826: prioridad antigua -5, nueva prioridad 7 #> ps -el F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY 4 S 0 12826 12208 4 87 7 708 write_ pts/2

TIME CMD 00:00:15 yes

(obsrvese el campo NI en el primer caso en -5, y en el segundo con renice qued en 7, en tiempo real)

nohup y & Cuando se trata ejecutar procesos en background (segundo plano) se utiliza el comando nohup o el operador & . Aunque realizan una funcin similar, no son lo mismo. Si se desea liberar la terminal de un programa que se espera durar un tiempo considerable ejecutndose, entonces se usa . Esto funciona mejor cuando el resultado del proceso no es necesario mandarlo a la salida estndar (stdin), como por ejemplo cuando se ejecuta un respaldo o se abre un programa Xwindow desde la consola o terminal. Para lograr esto basta con escribir el comando en cuestin y agregar al final el smbolo & (ampersand).
$> $> $> la yes > /dev/null & tar czf respaldo /documentos/* > /dev/null/ & konqueror & (con estos ejemplos se ejecuta el comando y se libera terminal regresando el prompt)

Sin embargo lo anterior produce que el padre del proceso PPID que se invoc sea el proceso de la terminal en si, por lo que si cerramos la terminal o salimos de la sesin tambin se terminaran los procesos hijos que dependan de la terminal, no muy conveniente si se desea que el proceso continu en ejecucin. Para solucionar lo anterior, entonces se usa el comando nohup que permite al igual que '&' mandar el proceso y background y que este quede inmune a los hangups (de ah su nombre nohup) que es cuando se cuelga o termina la terminal o consola de la cual se ejecut el proceso.
$> nohup yes > /dev/null & $> nohup czf respaldo /documentos/* > /dev/null/ $> nohup konqueror

Asi se evita que el proceso se "cuelgue" al cerrar la consola.

jobs Si por ejemplo, se tiene acceso a una nica consola o terminal, y se tienen que ejecutar varios comandos que se ejecutarn por largo tiempo, se pueden entonces como ya se vi previamente con nohup y el operador '&' mandarlos a segundo plano o background con el objeto de liberar la terminal y continuar trabajando. Pero si solo se est en una terminal esto puede ser difcil de controlar, y para eos tenemos el comando jobs que lista los procesos actuales en ejecucin:
#> yes > /dev/null & [1] 26837 #> ls -laR > archivos.txt & [2] 26854 #> jobs [1]- Running [2]+ Running

yes >/dev/null & ls --color=tty -laR / >archivos.txt &

En el ejemplo previo, se ejecut el comando yes y se envi a background (&) y el sistema devolvi [1] 26837, indicando asi que se trata del trabajo o de la tarea [1] y su PID, lo mismo con la segunda tarea que es un listado recursivo desde la raz y enviado a un archivo, esta es la segunda tarea. Con los comandos fg (foreground) y bg background es posible manipular procesos que esten suspendidos temporalmente, ya sea porque se les envi una seal de suspensin como STOP (20) o porque al estarlos ejecutando se presion ctrl-Z. Entonces para reanudar su ejecucin en primer plano usaramos fg:
#> jobs [1]- Stopped [2]+ Stopped #> fg %1 #> jobs [1]+ Running [2]- Stopped yes >/dev/null & ls --color=tty -laR / >archivos.txt & yes >/dev/null & ls --color=tty -laR / >archivos.txt &

Obsrvese como al traer en primer plano al 'job' o proceso 1, este adquiri el smbolo [+] que indica que esta al frente. Lo mismo sera con bg que volvera a reinicar el proceso pero en segundo plano. Y tambin es posible matar los procesos con kill indicando el nmero que devuelve jobs: kill %1, terminara con el proceso en jobs nmero 1. top Una utilera muy usada y muy til para el monitoreo en tiempo real del estado de los procesos y de otras variantes del sistema es el programa llamado top, se ejecuta desde la lnea de comandos, es interactivo y por defecto se actualiza cada 3 segundos.
$> top top - 13:07:30 up 8 days, 6:44, 4 users, load average: 0.11, 0.08, 0.08 Tasks: 133 total, 1 running, 131 sleeping, 0 stopped, 1 zombie Cpu(s): 0.0%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.2%si, 0.0%st Mem: 497356k total, 472352k used, 25004k free, 21500k buffers

Swap: 1156640k total, cached PID USER 26156 sergon 1 root 2 root migration/0 3 root ksoftirqd/0 4 root watchdog/0 5 root migration/1 ... PR 15 15 RT 34 RT RT NI 0 0 0 19 0 0

257088k used, VIRT RES 2160 1016 2012 616 0 0 0 0 0 0 0 0 SHR 784 584 0

899552k free, S %CPU %MEM R 1 0.2 S 0 0.1 S 0 0.0 0 0 0 0.0 0.0 0.0

60420k

TIME+ COMMAND 0:00.93 top 0:00.98 init 0:00.29 0:00.00 0:00.00 0:00.38

0 S 0 S 0 S

Estando adentro de la apliacin, presionando 'h' muestra una ayuda de los posibles comandos que permiten configurar top, por ejemplo, al presionar 's' pregunta por el tiempo en segundos de actualizacin, etc. htop similar a top, pero con mas opciones.

Monitorear Procesos
En entornos Unix existen herramientas para todos los gustos que nos ayudan a monitorear o administrar procesos, en esta entrada nombraremos algunas aplicaciones nativas de Unix y otras que no lo son, y que nos sirven para visualizar los procesos del sistema su pid, y otra informacion importante. Comando PS Es un comando muy util y con muchas opciones, para listar los procesos que se estan corriendo en el sistema podemos hacer lo siguiente: ps -e ps -A Con cualquiera de los dos comandos anteriores podemos listar los procesos con su respectivo PID. Si deseamos mas informacin como: el usuario, la carga de cpu y memoria, el tiempo y por supuesto su nombre con la ruta del ejecutable usamos los siguientes parmetros : ps -aux Ahora si deseamos encontrar un proceso en especfico podemos usar grep ps -e | grep guake Herramienta Top Existe una herramienta un poco mas interactiva que viene por defecto en todas las distribuciones de GNU/Linux llamada top, esta aplicacin nos muestra en tiempo real toda la informacin relevante de cada proceso que se esta ejecutando, para lanzarlo solo basta escribir en consola top:

En la imagen vemos claramente alguna informacin importante como:


PID USUARIO %CPU %MEMORIA NOMBRE

Herramienta Watsup Por otra parte si no eres muy amante de la consola, watsup es la herramienta perfecta para ti, es un monitor de procesos grafico de codigo abierto (GPL), para descargarlo puedes ir a este enlace para instalarlo debemos seguir estos sencillos pasos: make make install Para ejecutarlo simplemente escribes en una consola watsup o tecleas alt+f2 y escribes watsup, inmediatamente nos saldr la pantalla en la cual podemos ver los procesos actuales e incluso matar el que nosotros deseemos:

Demonios y Temporizadores
Temporizadores El SO mantiene un temporizador por proceso El proceso activa el temporizador con alarm() El SO enva una seal SIGALRM al proceso cuando vence su temporizador Procesos demonios Es un proceso que ejecuta: En background (su padre no le espera) No asociado a un terminal o proceso login Que espera que ocurra un evento Funciona como servior O que debe realizar una tarea de forma peridicas Caractersticas Se arrancan al iniciar el sistema

No mueren Estn normalmente en espera de evento No hacen el trabajo, lanzan otros procesos o procesos ligeros Ejemplos:Telnetd, httpd, lpd

También podría gustarte