Вы находитесь на странице: 1из 4

Lenguaje de Programacion III - Facultad Politecnica - UNA

Resumen capitulo 13 - Control de Procesos


Victor Ughelli
Facultad Politecnica - UNA viktor992@hotmail.com

Yohanna Lisnichuk
Facultad Politecnica - UNA yolile_3000@hotmail.com

Ariel Daz
Facultad Politecnica - UNA rokkaie@gmail.com

Sergio Fernndez
Facultad Politecnica - UNA lastdeo@gmail.com

Abstract
Se resumen los fundamentos del control de procesos en Linux. Los atributos del proceso, su PID, real y efectivo, riesgos y benecios de setUID y setGUID, como crear procesos incluyendo fork y exec y popen. Tambien se describe como atenderlos, establecer alarmas y cronometros y como terminarlos. Por ltimo se explica la manipulacion de seales y la planicacin de procesos en Linux. Keywords proceso, seal, fork, execve, signal

Memoria: y otros recursos de sistema asignados al proceso El planicador del ncleo asigna el tiempo de ejecucin de CPU, llamado porciones de tiempo, entre todos los procesos, vaciando de antemano cada proceso cuando termina su porcin de tiempo. Los procesos tienen caractersticas que los identican de manera nica, el ncleo proporciona una interfaz para obtener cierta informacin de cada proceso.

3. Indenticador de Procesos
Un PID (entero positivo) identica de forma nica a un proceso. Se dice que un proceso que crea un nuevo proceso ha creado un proceso hijo y a ste se le llama proceso padre. El proceso padre de todos los dems procesos con PID 1, es el init, este es e primer proceso que comienza despus de que se inicie el ncle, init trae el sistema, inicia los demonios y ejecuta otros programas cuando son necesarios. Es importante que un proceso conozca el PID de su padre, ya que puede utulizar su PID para crear archivos y directorios nicos. 3.1 ID reales y efectivos Atributos de proceso Tipo Funcin pid_t getpid(void); pid_t getppid(void); uid_t getuid(void); uid_t geteuid(void); gid_t getgid(void); gid_t getegid(void);

1.
Fork:

El modelo de proceso de Linux


Para crear otro proceso que sea una copia exacta de un proceso existente para reemplazar el programa que se est ejecutando en un proceso por otro programa. Ejecutar otro programa normalmente implica ambas operaciones, conla posible alteracin del entorno tambin.

En Linux hay dos operaciones para crear o alterar procesos:

execve:

Tambin existen otras opciones para crear procesos ligeros (hilos) que proporcionan hilos separados de ejecucin y pilas para segmentos de datos compartidos. Sentencias como _clone sirven para esto.

2.

Atributos de proceso

Un proceso es una instancia de un programa en ejecucin y tambin la unidad bsica de planicacin deLinux. Tiene los siguientes elementos: Contexto: el es estado de ejecucin actual del programa Directorio: de trabajo actual del programa Archivos: y directorios a los que tiene acceso el programa Credenciales: o derechos del programa, como su modo y propiedad de archivo

Table 1. Atributo ID del proceso ID del proceso padre ID de usuario real ID del usuario efectivo ID del grupo real ID del grupo efectivo

El ID de usuario y de grupo reales indican quines somos en realidad. Se leen de /etc/passwd y cuando ingresamos. Son las representaciones numricas de nuestro nombre de ingreso y de nuestra membresa de grupo principal. Los ID efectivos de usuario y de grupo se utilizan principalmente por razones de seguridad, pero, en algunas circunstancias, coinciden con los reales. La diferencia entre los ID reales y los efectivos se relaciona principalmente con programas que son setGID o setUID. 3.2 Programas SetUID y SetGID

[Copyright notice will appear here once preprint option is removed.]

Se llaman as porque los UID o GID efectivos estn establecidos como los UID o GID del archivo en lugar de cmo el ID del propietario o del grupo del usuario que est ejecutando el programa.

2014/3/12

El propsito de estos programas es ofrecer permisos especiales al usuario que est ejecutando el programa. Un programa setUID raz es por ejemplo el passwd. Una s del bit ejecutable de usuario indica que passwd se ejecutar como programa setUID raz. Una s en el bit ejecutable de grupo signica que un programa se ejecutar como programa setGID. Obs: En linux las contraseas encriptadas se encuentran en /etc/shadow en las que solo las puede leer y escribir el usuario raz. Hay que tener en cuenta que este tipo de programas raz son riesgosos para la seguridad ya que tienen privilegios de superusuario al ejecutarse. 3.3 Informacin de grupo y de usuario

Como indica la Tabla 2, hay dos tipos de fallos de memoria:


Fallos menores: se producen cuando la CPU debe acceder a

memoria principal en lugar de ller datos de la cach. Esto se produce porque el cdigo o los datos que necesita la CPU no estn en su cach
Fallos mayores: se producen cuando un proceso debe leer datos

del disco porque el cdigo o los datos necesarios no estn en la RAM La informacin que nos ofrece getusage y que times no, es el nmero de fallos de memoria y accesos a disco relacionados con los fallos. geteusage puede devolver la informacin del proceso padre o de sus hijos. La informacin de tiempo que produce getrusage no es tan precisa como la de times.

Hay dos formas de convertir UID en nombres legibles para las personas: Con getlogin: devuelve el nombre de ingreso del usuario que est ejecutando un proceso. Una vez que se tenga este nombre se lo pasa a la funcin getpwnam, que devuelve la entrada completa de 3.4.3 Sesiones y grupos de proceso /etc/passwd correspondiente a este nombre de ingreso. Con getpwuid: tambin devuelve la entrada adecuada de /etc/passwd. Un grupo de proceso es un conjunto de procesos relacionados, normalmente una secuencia de comandos en un conducto. Todos 3.4 Informacin adicional de procesos los procesos del grupo tienen el mismo ID de grupo de proceso. El propsito de estos grupos es facilitar el control de trabajo. As si Hay otras informaciones sobre procesos que pueden servir, el nterminamos el proceso se terminan todos los del grupo, terminando cleo de Linux mantiene tres valores de tiempo separados para los el grupo de proceso en lugar de cada uno procesos: Una sesin consiste en uno o ms grupos de proceso. Un lder Tiempo de reloj de pared, es el tiempo transcurrido de sesin es el proceso que la ha creado. Cada sesin tiene un Tiempo de CPU de usuario, es la cantidad de tiempo que utiliza identicador nico llamado ID de sesin, que es el PID del lder de el procesador para la ejecucin de cdigo en modo usuario la sesin. Las sesiones sirven para el mismo propsito con respecto a los grupos de proceso que stos a los procesos individuales. Tiempo de CPU de sistema, es la cantidad de tiempo utilizada en ejecutar cdigo de ncleo. Las funciones que sirven para obtener esta informacin son time o getrusage. La utilizacin de recursos de un proceso slo puede obtenerse a travs de una llamada getrusage. 3.4.1 Tiempos de proceso

4. Cmo crear procesos


4.1 Cmo utilizar la funcin system La funcin system ejecuta el comando especicado por string, que puede incluir opciones y argumentos 4.1.1 La llamada de sistema fork

times devuelve el nmero de ties de reloj que han pasado desde que hemos arrancado el sistema, tambin conocido como tiempo de reloj de pared. Para convertir los ties en segundos utilizamos la funcin sysconf que convierte sus argumentos en valores que denen lmites y opciones en tiempo de ejecucin. 3.4.2 Utilizacin de recursos

Algunos de los recursos que hay que considerar adems del tiempo de CPU son: la huella de memoria del proceso, cunta memoria est estructurada, los tipos de acceso a memoria que hace el proceso, la cantidad y el tipo de E/S que realiza y la cantidad y tipo de actividad de red que genera. La estructura del sistema que obtiene esta informacin es rusage. Linux solo hace seguimiento a los recursos del sistema de la Tabla 2 Table 2. Recursos de sistema Seguidos Descripcin Tiempo utilizado en la ejecucin de cdigo en modo usuario ru_stime Tiempo utilizado en la ejecucin de cdigo de ncleo ru_mint El nmero de fallos menores ru_majt El nmero de fallos mayores ru_nswap El nmero de pginas de memoria ledas en el disco debido a fallas mayores Recurso ru_utime

La llamada fork crea un nuevo proceso. El nuevo proceso, o proceso hijo, ser una copia del proceso que llama, o proceso padre. Si tiene xito fork devuelve el PID del proceso hijo al padre y 0 al hijo. El nuevo proceso es una copia exacta del proceso padre, excepto por los PID y PPID. fork hace una copia completa del padre incluyendo los UID y GID reales y efectivos, los ID del grupo de proceso y de la sesin, el entorno, los lmites de recursos, archivos abiertos y segmentos de memoria compartida. El hijo no hereda las alarmas establecidas en el padre, los bloques de archivo que ha creado el padres ni las seales. No podemos predecir si un padre se ejecutar antes o despus que su hijo. Las instrucciones se ejecutan de manera asncrona. El comportamiento asncrono de fork signica que no deberamos ejecutar cdigo en el hijo que dependa de la ejecucin de cdigo en el padre y viceversa, si lo hacemos crearamos una condicin de carrera potencial, que se produce cuando mltiples procesos quieren utilizar un recurso compartido pero hacerlo depende del orden en que se ejecuten. Un fork puede fallar porque ya existen muchos procesos creados en el sistema o porque el padre ya tiene demasiados hijos. Si el fork falla devuelve -1 al proceso padre y no crea el hijo. Fork es muy lento, por eso se cre vfork, que no realiza toda la copia del padre,si no que hasta que se llame a exec o exit el nuevo proceso se ejecuta en el espacio de direcciones del padre, haciendo que no se produzca una condicin de carrera.

2014/3/12

Valor -1 1 0 >0

Table 3. Valores posibles de PID Descripcin espera a cualquier proceso hijo cuyo PGID sea igual al valor absoluto de PID Espera a cualquier proceso hijo Espera a cualquier proceso hijo cuyo PGID sea igual al del proceso que llama Espera a cualquier proceso hijo cuyo PID sea igual a pid

5.2.1

La funcin exit

exit tiene como resultado la terminacin normal de un programa y devuelve status al proceso padre. Se ejecutan las funciones registradas con atexit. _exit no ejecuta estas funciones. 5.2.2 Cmo utilizar abort

Se utiliza para terminaciones anormales. Se debe utilizar como ltimo recurso, cuando hay un error con el que no podemos tratar a travs de programa, como escasez severa de memoria. 5.2.3 Cmo utilizar la funcin kill

4.1.2

La familia exec

La funcin exec es una familia de seis funciones. exec reemplaza completamente la imagel del proceso que llama por la del programa que se le est aplicando exec. Mientras que fork crea un nuevo proceso y as genera un nuevo PID, exec inicia un nuevo programa, reemplazando al proceso original. El PID de un proceso al que se le est ejecutando exec no cambia. execve toma tres argumentos: path, argv, y envp. path es la ruta completa qeu queremos ejecutar. argv es la lista completa de argumentos que queremos pasar al programa, envp es un puntero a un entorno especializado, si lo hay, para el programa al que aplicamos exec. Si un exec tiene xito no retorna al que llama. Si falla devuelve -1 y establece la variable global errno. 4.2 Cmo utilizar la funcin popen

La funcin kill tiene los argumentos: pid, que especica el proceso que queremos eliminar, y sig que es la seal que queremos enviar, en este caso SIGKILL. kill se utiliza normalmente para terminar un proceso o grupo de proceso, pero tambin se puede utilizar para enviar cualquier seal a cualquiera de ellos.

6. Seales
Las seales son eventos que pueden ser dirigidos a un proceso por el mismo u otro proceso. Frecuentemente se utilizan para noticar a un proceso de un evento excepcional. Es el anlogo en software a una interrupcin de hardware, un evento que se produce casi en cualquier momento mientras se esta ejecutando un proceso. Su naturaleza impredecible indica que las seales son asncronas. Ademas de poder ocurrir en cualquier momento, el proceso que la recibe no tiene control sobre el momento en que se enva la seal. Cuando un procesos recibe una seal, tiene tres opciones:
Ignorarla Captarla, lo que hace que se ejecute una porcin de cdigo

popen llama a pipe y crea un conducto a la entrada estndar o desde la salida estndar del programa o guin especicado por command, pero no ambas. El argumento type es r para leer el stdout conducido o w para escribir en stdin.

especial llamada manipulador de seal.


Permitir que se produzca la accin predeterminada de la seal.

5.
5.1

Cmo manipular procesos


Cmo atender procesos, la familia wait

Cuando se crean procesos con fork o exec, el proceso padre debera esperar a que terminara para recoger su estado de salida y prevenir la creacin de zombies. Un proceso zombie es un proceso hijo que termina antes de que el padre tenga oportunidad de recoger su estado de salida con wait o waitpid. Se llama zombie porque a pesar de estar muerto, todava est presente en la tabla. Un proceso hurfano es un proceso hijo cuyo padre termina antes de llamar a wait o waitpid. En este caso el proceso init se convierte en el padre del hijo y recoge su estado de salida, evitando as la creacin de zombies. Para recoger estos estados se utilizan wait y waitpid status, almacena el estado de salida del proceso hijo. Sus posibles valores se muestran en la tabla 3 5.2 Programas de eliminacin

Una seal es generada por un proceso cuando ocurre el evento que hace que se produzca la seal. A la inversa, una seal se entrega cuando el proceso al que se le envio lleva a cabo la accin relacionada con ella. Entre la generacin y la entrega, se la considera pendiente. La entrega de una seal puede ser bloqueada o retrasada. La disposicin de una seal, es como responde el proceso a ella. 6.1 Como enviar seales

Hay dos maneras de enviar una seal a un proceso en ejecucin: utilizando el comando kill (kill(1)) y utilizando la funcin kill(2). El comando kill, es realmente una interfaz de usuario a la funcin kill 6.1.1 Como utilizar el comando kill

Para utilizar el comando kill, se debe llamar a system, fork, o exec. Las llamadas system, y fork generan un nuevo proceso para que se ejecute kill, mientras que exec reemplaza el proceso que llama antes de ejecutar kill. El resultado es el mismo: el objetivo es eliminado 6.1.2 Como utilizar la funcin kill

Un proceso puede terminar por cinco razones:


Su funcin main llama a return Llama a exit Llama a a_exit Llama a abort Lo termina una seal

Es mas sencilla que aplicar exec al comando kill porque no se necesita llevar a cabo pasos adicionales para preparar una cadena exec. Todo lo que se necesita es el PID y la seal que se quiere utilizar. La seal nula, no enva ninguna seal, pero realiza la comprobacin de errores normal, aunque puede ser til para comprobar el estado de un proceso (observando el PID), no es conable porque el PID rota periodicamente.

2014/3/12

6.2

Como captar seales

6.3.2

Como registrar un manipulador de seales

Cada proceso puede decidir como responder a todas las seales excepto a SIGSTOP y SIGKILL, que no pueden ser capturadas e ignoradas. La forma mas sencilla de captar seales no implica realmente captarlas sino esperara a que sean enviadas. La funcin alarm establece un cronometro que enva la seal SIGALARM cuando expira el tiempo. De forma similar actua la funcin pause, solo que esta suspende un proceso hasta que recibe cualquier seal. 6.2.1 Como establecer una alarma

La funcin alarm, establece un cronometro en el proceso que llama, cuando expira, enva SIGALARM al que llama y, a no ser que este capte la seal, la accin predeterminada de SIGALARM es eliminar el proceso. Su prototipo es: include <unistd.h> unsigned int alarm(unsigned int seconds); seconds es el numero de segundos hasta que expira el tiempo. Un proceso puede tener solo una alarma. Establecer seconds como 0 cancela cualquier alarma previamente establecida. 6.2.2 Como utilizar la funcin pause

La funcin pause suspende el proceso que llama hasta que llegue cualquier seal. El que llama debes estar equipado para manipular la seal entregada, o se producir su disposicin predeterminada. Su prototipo es: #include <unistd.h> int pause(void); pause vuelve al proceso que llama solo si el proceso captura una seal. Si la seal entregada invoca un manipulador, se ejecutara antes de que vuelva pause. 6.3 Como denir un manipulador de seales

En algunos casos la accin predeterminada de una seal es el comportamiento deseado. Para alterar este comportamiento o realizar tareas adicionales, se debe denir e instalar un manipulador de seales personalizado par anular la accin predeterminada. POSIX dene un conjunto de funciones para la creacin y manipulacin de seales. El procedimiento general es crear un conjunto de seales, establecer las que queramos captar, registrar un manipulador de seales con el nucleo y esperar a captar la seal. Para crear, establecer y consultar un conjunto de seales, utilizamos las cinco funciones siguientes, denidas todas en <signal.h>
int sigemptyset(sigset_t *set); int sigllset(sigset_t *set); int sigaddset(sigset_t *set, int signum); int sigdelset(sigset_t *set, int signum); int sigismember(const sigset_t *set, int signum);

Se debe utilizar sigprocmask para establecer y/o modicar la mascara de seales actual. Una vez establecida una mascara de seales, se necesita registrar un manipulador de seales para la seal o seales que queremos captar, utilizando la llamada sigaction El prototipo de sigpromask es: #include <signal.h> int sigprocmask (int how, const sigset_t *set, sigset_t *oldest); sigprocmask establece o examina la mascara de seales actual, dependiendo del valor de how, que puede ser uno de los siguientes: SIG_BLOCK, set contiene seales adicionales que bloquear SIG_UNBLOCK, set contiene seales adicionales que desbloquear SIG_SETMASK, set contiene una mascara de seales nuevas. si how es NULL, se ignora. Si set es NULL, la mascara actual se almacena en oldset; si oldset es NULL, se ignora. #include <signal.h> int sigaction(int signm, const struct sigaction *act, struct sigaction *oldact); sigaction establece un manipulador de seales para la seal especicada en signum. La estructura sigaction (act y oldact) describe una disposicin de seal. struct sigaction { void (*sa_handler)(int); sigset_t sa_mask; int sa_ags; void (*sa_restorer)(void); } sa_handler es un punter a la function que especica el manipulador, o funcion que hay que invocar cuando se genera la seal de signum. Cuando se esta ejecutando un manipulador de seales, la seal que se disparo esta bloqueada. sa_mask dene la mascara de las seales de un conjunto de seales adicionales que deberan bloquerse durante la ejecucin del manipulador. sa_ags es una mascara que modica el comportamiento de sa_handler. Ignoramos el elemento sa_restorer; es obsoleto y no se debera utilizar. Para resumir, sigprocmask manipula el conjunto de seales que queremos bloquear y consulta la mascara de seales actual. La funcion sigaction registra un manipulador de seales para una o mas sealse con el nucleo y establece el comportamiento exacto del manipulador. 6.4 Como detectar seales

sigpending permite que un proceso detecte seales pendientes (seales que salieron a la luz mientras estaban bloqueadas) y decida si ignorarlas o permitir que sean entregadas. El prototipo de sigpending es: #include <signal.h> int sigpending (sigset_t *set); El conjunto de las seales pendientes se devuelve en set. Utilizamos sigismember para determinar si las seales en las que estamos interesados estn pendientes, es decir, si estn en set. 6.5 Planicacin de procesos

set es un conjunto de seales de tipo sigset_t. sigemptyset inicia un conjunto de seales set de forma que todas las seales estn excluidas del conjunto. Sigllset, a la inversa, inicia set de forma que todas las seales estn incluidas. Sigaddset aade la seal signum a set. Sigdelset elimina signum de set. Sigismember comprueba si signum esta en set. 6.3.1 Como crear un conjunto de seales

Un proceso con una prioridad estatica mayor siempre preceder a un proceso con una prioridad estatica menor. Para el algoritmo de planicacin tradicional, a los procesos con una prioridad estatica de 0 se les asignara tiempo de CPU en base a su prioridad dinmica, tambin conocida como valor nice.

Se utiliza sigemptyset o sigllset para iniciar un conjunto de seales. Si creamos un conjunto de seales vacio, necesitaremos utilizar sigaddset para aadir las seales en las que estemos interesados. Si creamos un conjunto de seales completo, utilizamos sigdelsete para eliminar las seales de la mascara de seales.

2014/3/12

Вам также может понравиться