Procesos

De doc.ubuntu-es
(Redirigido desde Los procesos)
Saltar a: navegación, buscar

Los procesos que se encuentren en ejecución en un determinado momento serán, en general, de diferente naturaleza. Podemos encontrar:

  • Procesos de sistema, o bien procesos asociados al funcionamiento local de la máquina y del kernel, o bien procesos (denominados daemons) asociados al control de diferentes servicios, ya sean locales, o de red, porque estamos ofreciendo el servicio (actuamos de servidor) o estamos recibiendo el servicio (actuamos de clientes). La mayoría de estos procesos aparecerán asociados al usuario root, aunque no estemos presentes en ese momento como usuarios. Puede haber algunos servicios asociados a otros usuarios de sistema (lp, bin, www, mail, etc.), estos son usuarios “virtuales” que utiliza el sistema para ejecutar ciertos procesos.
  • Procesos del usuario administrador: en caso de actuar como root, nuestros procesos interactivos o aplicaciones lanzadas también aparecerán como procesos asociados al usuario root.
  • Procesos de usuarios del sistema: asociados a la ejecución de sus aplicaciones, ya sea tareas interactivas en modo texto o en modo gráfico.

Como comandos rápidos y más útiles podemos utilizar:

  • ps: el comando estándar, lista los procesos con sus datos de usuario, tiempo, identificador de proceso y línea de comandos usada. Una de las opciones utilizada es ps ef, pero hay muchas opciones disponibles (ver man).
  • top, htop: una versión que nos da una lista actualizada a intervalos.
  • kill: permite enviar señales a procesos como, por ejemplo, la de terminación kill -9 PID,donde indicamos el identificador del proceso. Útil para procesos con comportamiento inestable o programas interactivos que han dejado de responder.

Contenido

Redireccionamientos

Cualquier proceso tiene una entrada estándar (stdin) y una salida hacia dos archivos conocidos como stdout y stderr. Veamos un ejemplo:

  • Ejecutamos un comando por medio del teclado. En este caso la entrada estándar es el teclado.
  • Una vez que el proceso comienza tendremos una salida con dos archivos, stdout y stderr, aunque uno de los dos estará vacío y por lo tanto solo veremos el otro.

Normalmente la salida stdout es la pantalla, pero si hubo un error en la ejecución del proceso la salida por pantalla corresponderá a stderror con un mensaje de error. Normalmente ambas salidas están unificadas hacia la pantalla. Para comprender mejor qué es lo que sucede vamos a redireccionar la salida a otro archivo. Para esto utilizamos como redireccionador el símbolo `>`. Con esto conseguimos redireccionar a otro archivo el contenido de la salida. Este tipo de redireccionamiento borra lo que hubiese anteriormente en el archivo. Si queremos copiar el nuevo contenido debajo de la información ya existente sin borrar nada, podemos usar `>>` en lugar de `>`

Redireccionando un proceso a un archivo

Vamos a listar todo lo que haya en directorio raíz de la siguiente manera:

ls /

En este caso la salida nos mostrará algo así como:

bin dev initrd lib mnt root sys var
boot etc initrd.img lost+found opt sbin tmp vmlinuz
cdrom home initrd.img.old media proc srv usr vmlinuz.old

Para redireccionar esta salida (o sea que en lugar de salir por pantalla lo haremos hacia un archivo) debemos ejecutar el siguiente comando:

ls / > listar.txt

Si ahora quisiéramos ver el resultado por pantalla no veríamos nada ya que fue redireccionado al archivo `listar.txt` Para ver el contenido de este archivo podemos hacer lo siguiente:

cat listar.txt

Y veremos lo siguiente

 boot cdrom dev etc home initrd initrd.img initrd.img.old lib lost+found
 media mnt opt proc root sbin srv sys tmp usr var vmlinuz vmlinuz.old

Si comparamos el resultado veremos que es el mismo que obtuvimos cuando hicimos `ls`antes de redireccionar.

Error de proceso

¿Qué pasaría si pedimos al sistema que nos muestre un proceso que tiene un error? Hagamos una prueba

ls /xxx

Como el directorio/archivo xxx no existe, se va a generar un error.

ls: xxx: No existe el fichero o directorio

Podemos hacer lo siguiente:

ls /xxx >pepe.txt 2>>xerror.log
root@losindios:~# cat xerror.log
ls: /xxx: No existe el fichero o directorio

Esto significa que hemos redireccionado la salida del error de 'ls / xxx' a un archivo llamado pepe.txt y mediante el número 2 estamos redirigiendo a un archivo xerror.log la salida de error estándar. Mientras que el número 0 indica entrada estándar, el número 1 indica salida estándar y el número 3 indica error estándar

Procesos en primer y segundo plano

Un proceso que corre en primer plano (`fg` de foreground) normalmente es aquél que ingresamos por teclado y podemos ver por pantalla. Los procesos tipo demonio no corren en primer plano, sino en segundo, no son llamados desde una terminal (tty) sino desde un puerto, y no aparecen en pantalla. Si queremos pasar un proceso que está corriendo en primer plano a segundo plano, podemos utilizar el símbolo `&`Veamos un ejemplo:

top&

Y el sistema nos devuelve algo como

[1] 11068

Vemos que no apareció por pantalla el resultado de `top`con los procesos que hay corriendo en el sistema sino un número de trabajo asignado y el PID (Process ID) correspondiente. No es que `top` no esté corriendo sino que lo está haciendo en background.

Usando jobs

Si utilizamos `jobs`podremos ver los procesos que están corriendo en 2do.plano. Veamos cómo:

jobs

Y el sistema nos devolverá

jobs
[1]+ Stopped top

Capturando ambas salidas en un solo archivo

Podemos capturar stdout y stderr en un solo archivo mediante el siguiente comando:

ls /xxx > listar.txt 2>&1
root@losindios:~# cat listar.txt

Y el 'cat' nos devuelve:

ls: /xxx: No existe el fichero o directorio

De esta manera podremos ver ambas salidas pero solo de la última vez que ejecutamos este comando. Si quisiéramos contar con un log completo de procesos podríamos utilizar un comando llamado `cron` para automatizar el comando anterior y que se repita cada cierta cantidad de veces en distintos horarios. Para que la captura no borre los resultados anteriores debemos escribir el comando en la siguiente forma

ls /xxx >> listar.txt 2>&1

De esta forma el archivo conservará las entradas anteriores sin borrar nada.

Redirecciones, usando pipes (tuberías, fontanerías)

Lo que hace 'pipes' es tomar una salida de un proceso y convertirla en la entrada estándar de otro proceso. El símbolo para hacerlo es '|' que normalmente se obtiene mediante la combinación de teclas AltGr + 1 (puede ser diferente en otros teclados.) A veces cuando queremos ver un archivo demasiado grande por pantalla, estamos frente a un problema. Si el archivo tiene más contenido que lo visible en la pantalla, éste pasará muy rápido y solo veremos la parte final. Veamos un ejemplo:

ls -R /

La 'R' significa recursividad, es decir que nos va a mostrar todos los directorios/subdirectorios y archivos que se encuentren dentro de '/' Veremos algo que corre por la pantalla a gran velocidad y solo será visible al última parte del proceso 'ls' por tratarse de demasiado contenido para una sola pantalla. Tal cual vimos en su momento, el comando 'less' imprime en pantalla solo una parte del contenido total, equivalente a lo que puede verse en una pantalla completa y no más. Mediante las teclas de dirección 'arriba' y 'abajo' es posible desplazarse por la pantalla para ver todo el contenido de un archivo.

Entonces podemos escribir lo siguiente:

ls -R / | less

De esta forma redireccionamos la salida del proceso 'ls' a la entrada de otro proceso llamado 'less' lo que nos permitirá ver el archivo estándar de salida 'ls' por partes. Veamos otro ejemplo donde podemos utilizar 'pipes'

Pipes con el comando grep

Como recordamos 'grep' nos permite filtrar un archivo, su contenido, un grupo de archivos, etc que tengan coincidencia con una cadena de caracteres. Por ejemplo vamos a buscar los archivos que tengan extensión 'txt' y que se encuentren dentro del directorio 'home'

ls -R /home | grep .txt

Y el sistema nos devuelve:

listar.txt
ls.txt

Lo que hemos hecho es buscar mediante ls -R /home en forma recursiva todos los directorios, subdirectorios y archivos dentro de /home, luego enviamos la salida de este proceso a la entrada de uno nuevo llamado 'grep'. Este último actuará como filtro utilizando la cadena de caracteres '.txt'

Utilizando bg

Mientras que '&' lleva a segundo plano un proceso existente en primer plano, 'bg' lo reinicia en segundo plano. 'bg' no utiliza el nombre del proceso ni el PID sino el número de trabajo.

bg %1

Utilizando fg

Mientras que 'bg' es background o segundo plano, 'fg' es foreground o primer plano. Lo que hace este comando es traer a primer plano un proceso que normalmente corre en segundo plano, utilizando también el número de trabajo. Ejemplo:

fg %1

Ctrl+Z

Para pasar a segundo plano un proceso que corre en primer plano, podemos también utilizar Ctrl + Z

Fuentes

  • © Fundació per a la Universitat Oberta de Catalunya
Av. Tibidabo, 39-43, 08035 Barcelona
Material realizado por Eureca Media, SL
© Autores: Josep Jorba Esteve y Remo Suppi Boldrito
Depósito legal: B-7.597-2004
ISBN: 84-9788-116-8
Se garantiza permiso para copiar, distribuir y modificar este documento según los términos de la GNU Free Documentation License,
Version 1.2 o cualquiera posterior publicada por la Free Software Foundation , sin secciones invariantes ni textos de cubierta
delantera o trasera. Se dispone de una copia de la licencia en el apartado “GNU Free Documentation License” de este curso. Puede
encontrarse una versión de la última versión de este documento en http://curso-sobre.berlios.de/introsobre.
Herramientas personales