Procesos

De doc.ubuntu-es
(Diferencias entre revisiones)
Saltar a: navegación, buscar
m (estructura; estilo)
 
(No se muestran 2 ediciones intermedias realizadas por 2 usuarios)
Línea 1: Línea 1:
 
Los '''procesos''' que se encuentren en ejecución en un determinado momento serán, en general, de diferente naturaleza. Podemos encontrar:
 
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 de sistema, o bien procesos asociados al funcionamiento local de la máquina y del [[kernel]], o bien procesos (denominados [[daemon|daemons]]) asociados al control de diferentes servicios, ya sean locales, o de red, porque estamos ofreciendo el servicio (actuamos de [[servidores|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 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.
 
* 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:
 
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).
+
* '''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.
 
* '''top''', '''htop''': una versión que nos da una lista actualizada a intervalos.
* '''kill''': nos permite eliminar procesos del sistema mediante el envío de señales al proceso 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.
+
* '''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.
  
 
== Redireccionamientos ==
 
== Redireccionamientos ==
  
Cualquier proceso tiene una entrada estandar (stdin) y una salida hacia dos archivos conocidos como stdout y stderr.
+
Cualquier proceso tiene una entrada estándar (stdin) y una salida hacia dos archivos conocidos como stdout y stderr.
 
Veamos un ejemplo:
 
Veamos un ejemplo:
* Ejecutamos un comando por medio del teclado. En este caso la entrada estandar es el teclado.
+
* 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.
 
* 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.
 
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.
Línea 20: Línea 20:
 
=== Redireccionando un proceso a un archivo ===
 
=== Redireccionando un proceso a un archivo ===
  
Vamos a listar todo lo que haya en directorio raiz de la siguiente manera:
+
Vamos a listar todo lo que haya en directorio raíz de la siguiente manera:
  
 
  ls /
 
  ls /
Línea 33: Línea 33:
 
  ls / > listar.txt
 
  ls / > listar.txt
  
Si ahora quisieramos ver el resultado por pantalla no veríamos nada ya que fue redireccionado al archivo `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:
 
Para ver el contenido de este archivo podemos hacer lo siguiente:
 
  cat listar.txt
 
  cat listar.txt
Línea 51: Línea 51:
 
Como el directorio/archivo xxx no existe, se va a generar un error.
 
Como el directorio/archivo xxx no existe, se va a generar un error.
  
  ls: xxx: No existe el fichero ó directorio
+
  ls: xxx: No existe el fichero o directorio
  
 
Podemos hacer lo siguiente:
 
Podemos hacer lo siguiente:
Línea 90: Línea 90:
 
  ls: /xxx: No existe el fichero o directorio
 
  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 quisieramos 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
+
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
 
  ls /xxx >> listar.txt 2>&1
  
Línea 97: Línea 97:
 
=== Redirecciones, usando pipes (tuberías, fontanerías) ===
 
=== Redirecciones, usando pipes (tuberías, fontanerías) ===
  
Lo que hace 'pipes' es tomar una salida de un proceso y convertirla en la entrada estandar de otro proceso. El símbolo para hacerlo es '|' que normalmente se obtine mediante la combinación de teclas AltGr + 1 (puede ser diferente en otros teclados.)
+
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 qu los visualizable en la pantalla, este pasará muy rápido y solo veremos la parte final. Veamos un ejemplo:
+
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 /
 
  ls -R /
Línea 108: Línea 108:
 
  ls -R / | less
 
  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 estandar de salida 'ls' por partes.
+
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'
 
Veamos otro ejemplo donde podemos utilizar 'pipes'
  

Última revisión de 19:36 18 jun 2012

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

[editar] 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 `>`

[editar] 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.

[editar] 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

[editar] 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.

[editar] 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

[editar] 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.

[editar] 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'

[editar] 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'

[editar] 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

[editar] 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

[editar] Ctrl+Z

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

[editar] 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