Vous êtes sur la page 1sur 20

GESTION Y MANIPULACION DE PROCESOS EN GNU/LINUX DEBIAN

SISTEMAS OPERATIVOS

JOS CARLOS ANDRADE AVILEZ VANESA PALOMINO CALUME

ING. SAMIR CASTAO

PROGRAMA DE INGENIERIA DE SISTEMAS FACULTAD DE INGENIERIAS UNIVERSIDAD DE CORDOBA

GESTION Y MANIPULACION DE PROCESOS EN GNU/LINUX DEBIAN Este documento es una gua terico-prctica sobre todo lo que tiene que ver con los procesos en Gnu/Linux debian, cuyo objetivo es familiarizar e internar de una forma clara al estudiante en el mundo de los sistemas operativos. En primera instancia es de vital importancia conocer el directorio de almacenamiento de procesos /proc el cual es un directorio extrao. Ya que realmente no existe, sin embargo puedes explorarlo. Sus archivos de tamao 0 no son ni binarios ni textos, sin embargo puedes examinarlos y desplegar su contenido. Este directorio especial contiene todos los detalles de tu sistema Linux, incluyendo el kernel, procesos y parmetros de configuracin. Estudiando el directorio /proc, puedes aprender como los comandos de Linux trabajan e incluso es posible realizar tareas administrativas. Bajo Linux, todo es administrado como un archivo; incluso los dispositivos son accedidos como archivos (en el directorio /dev). Aunque que podras pensar que archivos "normales" son ya sea texto o binarios (o posiblemente dispositivos o archivos pipe), el directorio /proc contiene una extrao tipo de archivo: archivos virtuales. Estos archivos son listados, pero realmente no existen en disco; el sistema operativo los crea al vuelo si tratas de leerlos. La mayora de los archivos virtuales siempre tienen una marca de tiempo (timestamp) actual, lo que indica que estn constantemente siendo actualizados. El directorio /proc en si mismo es creado cada vez que arrancas tu equipo. Se requiere ser root para poder examinar completamente el directorio en su totalidad; algunos de los archivos (tales como los relacionados a procesos) son propiedad del usuario que los ejecut. Y aunque casi tdos los archivos son de solo lectura, hay algunos pocos con permisos de escritura (notablemente en /proc/sys) que permiten realizar cambios en los parmetros del kernel. (Queda claro que debes ser muy cuidadoso con esto).

Organizacin del directorio /proc. El directorio /proc est organizado en directorios virtuales y subdirectorios, que agrupan archivos de tpicos similares. Trabajando como root el comando ls /proc te despliega algo como lo siguiente: #> ls /proc 1 2432 3340 3715 3762 5441 815 devices diskstats dma modules mounts mtrr

129 2474 3358 3716 3764 5445 acpi 1290 248 3413 3717 3812 5459 asound 133 2486 3435 3718 3813 5479 bus 1420 2489 3439 3728 3814 557 dri 165 276 3450 3731 39 166 280 36 2 5842 driver

execdomains partitions fb self

filesystems slabinfo interrupts splash

3733 3973 5854 fs 6 ide

2812 3602 3734 4 3603 3735 40

iomem ioports

stat swaps sysrq-trigger timer_list timer_stats uptime

2267 3

6381 irq

2268 326 3614 3737 4083 6558 net 2282 327 3696 3739 4868 6561 scsi 2285 3284 3697 3742 4873 6961 sys 2295 329 3700 3744 4878 7206 sysvipc 2335 3295 3701 3745 5 7207 tty

kallsyms kcore keys

key-users

kmsg

version vmcore vmstat zoneinfo

2400 330 3706 3747 5109 7222 buddyinfo loadavg 2401 3318 3709 3749 5112 7225 cmdline locks

2427 3329 3710 3751 541 7244 config.gz meminfo 2428 3336 3714 3753 5440 752 cpuinfo misc

Los directorios con nmeros (ms sobre esto en un momento) corresponden a cada proceso en ejecucin; un autoenlace simblico apunta al proceso actual. Algunos archivos virtuales proveen informacin sobre el hardware, tal

como /proc/cpuinfo y /proc/interrupts. Otros proporcionan informacin relacionada a los archivos, tales como /proc/filesystems o/proc/partitions. Los archivos situados bajo /proc/sys son relacionados a la configuracin de parmetros del kernel, como ya veremos.

El comando cat /proc/meminfo puede traer a la pantalla algo como lo siguiente: # cat /proc/meminfo MemTotal: MemFree: Buffers: Cached: 483488 kB 9348 kB 6796 kB 168292 kB

...varias lneas cortadas... Si ejecutas los comandos top o free, es posible que reconozcas algunos de estos valores. De hecho, varias utilerias muy conocidas acceden al directorio /proc para obtener su informacin. Por ejemplo, si tu quieres saber que tipo de kernel ests corriendo, puedes tratar con uname -srv, o ir directamente al origen y teclear cat /proc/version. Algunos otros archivos interesantes son:

/proc/apm: Prove informacin sobre "Advanced Power Management", si es que esta instalado.

/proc/acpi: Un directorio similar al anterior que ofrece bastantes datos sobre el ms moderno ACPI (Advanced Configuration and Power Interface). Por jemplo, para ver si tu laptop est conectada a la corriente AC, puedes usar cat /proc/acpi/ac_adapter/AC/state o en algunas distros cat

/proc/acpi/ac_adapter/ACAD/state, y as obtendrs "on line" o "off line".

/proc/cmdline: Muestra los parmetros que fueron pasados al kernel al momento del arranque (boot time). En mi caso contiene lo siguiente: root=/dev/disk/byid/scsi-SATA_FUJITSU_MHS2040_NLA5T3314DW3-part3 vga=0x317

resume=/dev/sda2 splash=silent PROFILE=QuintaWiFi, que me dice que en que particin est la raz del filesystem, que modo VGA est en uso y ms. El ltimo parmetro tiene que ver con openSUSE's System Configuration Profile Management.

/proc/cpuinfo: Muestra datos sobre el procesador de tu equipo. Por ejemplo, en mi laptop, cat /proc/cpuinfo me da un listado que comienza con:. processor vendor_id cpu family model model name stepping cpu MHz cache size :1 : 927.549 : 256 KB :0 : AuthenticAMD :6 :8 : Mobile AMD Athlon(tm) XP 2200+

Esto muestra que solo tengo un procesador, marcado como 0 de la familia 80686 (El '6' en la familia de cpu es dgito medio): un AMD Athlon XP, corriendo a poco menos de 1GHZ.

/proc/loadavg: Un archivo relacionado al anterior que muestra la carga promedio del procesador; su informacin incluye el uso de CPU en el ltimo minuto, ltimos cinco minutos y ltimos 15 minutos, asi como el nmero de procesos actuales ejecutndose.

/proc/stat: Tambin proporciona estadsticas, pero tomando en cuenta el ltimo boot (arranque).

/proc/uptime: Un archivo pequeo que solo tiene dos nmeros: por cuantos segundos tu sistema ha estado encendido, y cuantos segundos ha estado inactivo.

/proc/devices: Despliega todos los dispositivos actuales configurados y cargados de caracter y bloque. /proc/ide y /proc/scsi proveen datos sobre dispositivos IDE y SCSI.

/proc/ioports: Te muestra informacin sobre las regiones usadas para comunicaciones de E/S (I/O) de esos dispositivos.

/proc/dma: Muestra los canales "Direct Memory Access" en uso.

/proc/filesystems: Muestra cules tipos de sistemas de archivos (filesystems) estn soportados por tu kernel. Una porcin de esto puede lucir como esto: nodev sysfs nodev rootfs nodev bdev nodev proc nodev cpuset ...some lines snipped... nodev ramfs nodev hugetlbfs nodev mqueue ext3 nodev usbfs ext2 nodev autofs La primera columna muestra si el sistema de archivos est montado en un dispositivo de bloques. En mi caso, tengo particiones configuradas

con ext2 y ext3.

/proc/mounts: Muestra todos los "mounts" usados por tu mquina (la salida es muy similar a /etc/mtab). Similarmente, /proc/partititons y /proc/swaps muestra todas las particiones y el espacio swap respectivamente.

/proc/fs: Si ests exportando sistemas de archivos con NFS, este directorio tiene entre sus muchos subdirectorios y archivos a /proc/fs/nfsd/exports, que muestra los sistemas de archivos que estn siendo compartidos y sus permisos.

/proc/net: No hay nada mejor que esto para informacin de red. Describir cada archivo en este directorio requerira demasiado espacio, pero incluye dev (todos los dispositivos de red), varios archivos relacionados al firewall iptables, estadsticas de red y sockets, informacin sobre wireless y ms.

Tambin

hay

varios

archivos

relacionados

la

RAM.

Ya

mencion

anteriormente/proc/meminfo, pero tambin tienes a tu disposicin /proc/iomem, que muestra cuanta memoria RAM ha sido utilizada por tu sistema y /proc/kcore, que representa la memora fsica de tu RAM. A diferencia de otros archivos virtuales, /proc/kcore muestra un tamao que es igual a la memoria RAM ms una pequea sobrecarga. (No trates de darle cat a este archivo, porque su contenido es binario y solo desconfigurar tu pantalla). Finalmente, hay muchos archicos y directorios relacionados con el todos Hardware, los tal

como /proc/interrupts y /proc/irq,/proc/pci (para

dispositivos

PCI), /proc/bus y dems, pero todos estos incluyen informacin muy especfica que la mayora de los usuarios no necesitarn.

Que hay en un proceso? Como ya lo haba mencionado, los directorios con nombre numrico representan a los procesos en ejecucin. Cuando un proceso termina, su

directorio /proc desaparece automticamente. Si examinas cualquiera de estos directorios mientras existen, encontrars bastantes archivos, tles como: attr auxv clear_refs cmdline cpuset fdinfo cwd mountstats stat statm

loginuid oom_adj

environ maps exe mem mounts

oom_score status root smaps task wchan

coredump_filter fd

Veamos ms de cerca a los archivos principales:


cmdline: Contiene el comando que inicio el proceso, con todos sus parmetros. cwd: Enlace simblico al directorio actual de trabajo (current working directory cwd) del proceso; enlaces exe a los procesos ejecutables y enlaces root a su directorio superior.

environ: Muestras todas las variables de ambiente para el proceso. fd: Contiene los descriptores de archivo para el proceso, mostrando cules archivos o dispositivos lo estn usando.

maps, statm and mem: Trabaja con la memoria en uso por el proceso.

stat and status: Prove informacin acerca del estatus del proceso, pero el segundo es mucho ms claro que el primero. Estos archivos plantean varios retos de programacin de shell scripts. Por ejemplo, si quieres cazar a los procesos zombie, puedes buscar en todos los directorios numerados y verificar si aparece "(Z) Zombie" en el archivo status. Una vez necesitaba verificar si cierto programa se estaba ejecutando: Lo que hice fue escanear y mirar a los archivos cmdline, buscando por la cadena indicada. (Tambin puedes hacer esto con la salida del programa ps, pero no es el punto en este artculo). Y si quieres programar un programa que se vea mejor que top, toda la informacin que necesitas esta aqui.

Configurando el sistema: /proc/sys /proc/sys no solo prove informacin sobre el sistema, tambi facilita o permita cambiar parmetros del kernel al vuelo, y habilta o deshabilita caractersticas de usabilidad. (Por supuesto, esto puede daar tu sistema, considrate avisado.) Para determinar si puedes configurar un archivo o es solo de lectura, usa ls -ld; si un archivo tiene el atributo "w", significa que puedes configurar el kernel de alguna manera. Por ejemplo, ls -ld /proc/kernel/* comienza como esto: dr-xr-xr-x 0 root root 0 2008-01-26 00:49 pty dr-xr-xr-x 0 root root 0 2008-01-26 00:49 random -rw-r--r-- 1 root root 0 2008-01-26 00:49 acct -rw-r--r-- 1 root root 0 2008-01-26 00:49 acpi_video_flags -rw-r--r-- 1 root root 0 2008-01-26 00:49 audit_argv_kb -r--r--r-- 1 root root 0 2008-01-26 00:49 bootloader_type -rw------- 1 root root 0 2008-01-26 00:49 cad_pid -rw------- 1 root root 0 2008-01-26 00:49 cap-bound Se puede observar que bootloader_type no est hecho para ser cambiado, pero otros archivos si lo estn. Para cambiar un archivo, puedes usar algo como esto: echo 10 > /proc/sys/vm/swappiness Este ejemplo en particular cambiar el rendimiento de la paginacin de la memoria virtual.

Por cierto, estos cambios son solo temporales, y sus efectos desapareceran cuando tu reinicies el sistema; usa sysctl y el archivo de

configuracin /etc/sysctl.conf para afectar los cambios de manera permanente. Veamos el nivel superior del directorio /proc/sys:

debug: Contiene (sorpresa!) informacin para depuracin (debugging). Esto es muy bueno si ests metido en el desarrollo del kernel.

dev: Prove parmetros para dispositivos especficos en tu sistema; por ejemplo, checa el directorio dev/cdrom.

fs: Ofrece datos sobre cada posible aspecto del sistema de archivos. kernel: Te permite afectar la configuracin del kernel y su operacin directamente.

net: Te permite controlar aspectos relacionados a la red. Se cuidadoso, porque puedes perder conectividad.

vm: Trata con el subsistema VM.

Archivos y Directorios virtuales. El kernel de Linux tiene dos funciones primarias: controlar el acceso a los dispositivos fsicos del ordenador y establecer cundo y cmo los procesos interactuarn con estos dispositivos. El directorio /proc/ tambin llamado el sistema de archivos proc contiene una jerarqua de archivos especiales que representan el estado actual del kernel permitiendo a las aplicaciones y usuarios mirar detenidamente en la vista del kernel del sistema. Dentro del directorio /proc/, se puede encontrar una gran cantidad de informacin con detalles sobre el hardware del sistema y cualquier proceso que se est ejecutando actualmente. Adems, algunos de los archivos dentro del rbol de directorios /proc/ pueden ser manipulados por los usuarios y aplicaciones para comunicar al kernel cambios en la configuracin. En Linux, todo se guarda en archivos. La mayora de usuarios estn familiarizados con los dos primeros tipos de archivos, de texto y binarios. Sin embargo, el directorio /proc/ contiene otro tipo de archivos llamado archivo virtual.

Por esta razn, es que a menudo se hace referencia a /proc/ como un sistema de archivos virtual. Estos archivos virtuales poseen cualidades nicas. En primer lugar, la mayora de ellos tienen un tamao de 0 bytes. Sin embargo, cuando se visualiza el archivo, ste puede contener una gran cantidad de informacin. Adems, la mayora de configuraciones del tiempo y las fechas reflejan el tiempo y fecha real, lo que es un indicativo de que estn siendo constantemente modificados. Los archivos virtuales tales como /proc/interrupts, /proc/meminfo, /proc/mounts, y /proc/partitions proporcionan una vista rpida actualizada del hardware del sistema. Otros, como /proc/filesystems y el directorio /proc/sys/, proveen

informacin de configuracin del sistema e interfaces. Para propsitos organizacionales, los archivos que contienen informacin sobre un tpico similar se agrupan en directorios virtuales y sub-directorios. Por ejemplo, /proc/ide/ contiene informacin sobre los dispositivos IDE. De la misma forma, los directorios de procesos contienen informacin sobre cada proceso ejecutndose en el sistema.

Visualizacin de archivos virtuales. Mediante el uso de los comandos cat, more, o less en los archivos dentro del directorio /proc/, los usuarios pueden inmediatamente acceder una cantidad enorme de informacin acerca del sistema. Por ejemplo, para desplegar el tipo de CPU que tiene un equipo, escriba cat /proc/cpuinfo para recibir una salida similar a lo siguiente: processor vendor_id cpu family model model name stepping : 1 cpu MHz cache size fdiv_bug : no hlt_bug f00f_bug coma_bug fpu fpu_exception : no : no : no : yes : yes : 400.919 : 256 KB :0 : AuthenticAMD :5 :9 : AMD-K6(tm) 3D+ Processor

Comando(s) para la manipulacin de procesos. A continuacin conoceremos los comandos para la manipulacin de los procesos en Gnu/Linux deban, sus funciones, sintaxis y opciones dentro de este sistema operativo basado en Gnu/Linux.

Comando ps: Es el que permite informar sobre el estado de los procesos. ps est basado en el sistema de archivos /proc, es decir, lee directamente la informacin de los archivos que se encuentran en este directorio. Sintaxis: ps opcin La informacin mostrada por este comando es: %CPU Porcentaje de tiempo de procesador utilizado desde el lanzamiento del comando. %MEM Porcentaje de uso de la memoria disponible. CMD Nombre del comando que origin el proceso. GID Identidad del grupo bajo el cual se ejecuta el proceso. NI Nivel de prioridad del proceso. PID Identificador del proceso. PPID Identificador del proceso padre. RSS Cantidad de memoria RAM utilizada, en KB. STIME Fecha de lanzamiento del proceso. STAT Estado del proceso, que est compuesto por tres caracteres:

TIME Tiempo total de uso de la CPU. TT/TTY Nombre del terminal al que est asociado el proceso. UID Identidad del usuario bajo la cual se ejecuta el proceso. Tiene una gran cantidad de opciones, incluso estas opciones varan dependiendo del estilo en que se use el comando. Entre las opciones del comando ps las ms comunes son: -A Muestra todos los procesos. -a para mostrar los procesos de otros usuarios. -e Muestra todos los procesos, como A. -f para ver los procesos en forma de rbol. -u para ver nombre de usuario que lo inicio y tiempo del proceso. -x procesos que no poseen terminales asociados a estos (como los deamons). -U para ver los procesos de un usuario en particular.

Comando pstree: Este comando permite mostrar los nombres de los procesos de forma jerrquica, lo que nos permite conocer su filiacin o parentesco. Sintaxis: pstree [ -a ] [ -c ] [ -h | -H PID ] [ -l ] [ -n ] [ -p ] [ -u ] [ -A | -G | -U ] [ PID | USER ] Entre las opciones del comando pstree encontramos las siguientes: -a --arguments Muestra init primero, el resto hacia abajo y la derecha. -c --compact No cerrar subrboles idnticos. -h --highlight-all Destaca los procesos en curso de ejecucin: -H PID --highlight-pid=PID Muestra los proceso padres. -l --long No corta lneas largas. -n --numeric-sort Ordenar por nmero de PID.

-p --show-pids

Mostrar PIDs, implica c.

-u --uid-changes Mostrar UID. -U --unicode Usar UTF-8 (Unicode. -V --version Muestra informacin sobre el comando.

Comando kill: 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. Sintaxis: kill [-seal] pid Comando killall: 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. Sintaxis: killall [OPTION]... [--] NAME... Listado de seales: SIGHUP 1 Hang Up. Es la seal que se enva cuando un usuario se desconecta del terminal, finalizando el proceso. SIGINT 2 Interrupcin desde el teclado con la combinacin Control+C. El comportamiento predeterminado es finalizar el proceso. SIGQUIT 3 Salida por teclado con Control+\. Termina el proceso y guarda una copia del espacio de memoria en una archivo llamado core, muy til para la depuracin de aplicaciones.

SIGKILL 9 Ningn proceso puede ignorar esta seal, que termina inmediatamente el proceso sin proceder a ninguna operacin de limpieza. Es la ltima opcin a utilizar si un proceso no responde. SIGTERM 15 Seal predeterminada del comando kill. Termina el proceso. SIGCHLD 17 Seala a un proceso la parada o terminacin de sus hijos.

Comando top: Una utilera muy usada y muy verstil 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. Sintaxis: top -hv | -bcisSH -d delay -n iterations [-u user | -U user] -p pid [,pid ...] El comando top cuenta con las siguientes opciones: -d Tiempo transcurrido entre actualizaciones en segundos. -n Nmero de veces que actualiza la informacin. Despus, sale al terminal. -u Muestra todos los procesos de un usuario.

Ejemplo de la aplicacin de comandos para la manipulacin de procesos. Finalizar un proceso: Utilizando el comando kill y killall. Para finalizar un proceso mediante la consola, es preciso conocer el nmero de identificacin del proceso (PID). Para conocer el nmero basta con listar los procesos. Listados los procesos, buscar el proceso a finalizar y memorizar el nmero de la columna PID. Una vez conocido el PID basta con ejecutar en un terminal:

$ sudo kill [PID] Es conveniente comprobar que el proceso ha finalizado y ya no se encuentra en ejecucin. Puede suceder en ocasiones que algn proceso no finalice luego de haber ejecutado kill. En estos casos se puede intentar finalizarlos con el comando kill y una seal "ms fuerte" que fuerza a los procesos a terminar ms all de su voluntad:

$ sudo kill -9 [PID]

Suele ocurrir que al listar los procesos activos el que se desea finalizar tiene distintas instancias abiertas, es decir, dispone de varias PID y para finalizarlo se necesitara utilizar varias veces el comando kill. El comando killall se utiliza para finalizar todos los procesos que abre un comando.

Como se puede suponer, al disponer de distintas PID no es sta la que se le debe indicar al comando killall sino el nombre del proceso. Este nombre viene dado en el listado de procesos como CMD; entonces:

$ sudo killall [CMD]

Mediante el comando xkill. El comando xkill es una utilidad para forzar el Servidor X a cerrar conexiones. Este comando se puede utilizar como el comando kill:

$ sudo xkill -id [PID] La ventaja de este comando es que se puede utilizar sin necesidad de PID, ya que si se introduce en el terminal:

$ xkill El cursor se cambiar a una calavera y la aplicacin matar (finalizar) el proceso que controle la ventana donde se haga click con la calavera.

Pausar un proceso: Para pausar un proceso, es preciso conocer el nmero de identificacin del proceso (PID). Para conocer el nmero basta con listar los procesos. Listados los procesos, buscar el proceso a pausar y memorizar el nmero de la columna PID.

Una vez conocido el PID basta con ejecutar en un terminal:

$ sudo kill -STOP [PID] Para reanudarlo basta con teclear:

$ sudo kill -CONT [PID]

Con el comando ps aux obtendremos todos los procesos todos los procesos que se estn ejecutando en tiempo real, gracias al parmetro aux podemos recibir informacin adicional de dichos procesos.

Con el comando kill podemos detener algunos procesos en segundo plano, para ello le pasamos por parmetros el pid del proceso a detener.

Con el comando top podemos ver todos los procesos ejecutndose en tiempo real. Si le agregamos el parmetro -c

Con el comando pgrep podemos conocer el id de un proceso con solo apsarle como parametro su nombre.

con el comando pstree podemos observar un rbol de procesos con sus respectivos subprocesos.