Ejecutar un proceso hijo en otro shell

Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 8,9 KB

TEMA 6: PROCESOS


1.1. Evolución de un proceso


Cuando un usuario esta conectado le atiende el interprete de comandos (shell), que es un proceso con un cierto identificador. Si se solicita ejecutar un comando, es necesario que nazca un nuevo proceso que soporte la ejecución de dicho comando. Cuando el shell (proceso padre) recibe la cadena, ejecuta la llamada al sistema operativo fork()
, para crear un proceso hijo que es una copia idéntica a él mismo (shell) en lo que se refiere al ejecutable y a una parte del entorno. Obsérvese que el PPID (Parent PID) del proceso hijo es el PID del proceso padre. A continuación el proceso padre se queda esperando con la llamada al sistema operativo wait()
hasta que su hijo se ejecute. Mientras tanto el proceso hijo ejecuta la llamada exec()
para cambiarse a si mismo su código ejecutable, con lo que sustituye el código del intérprete de comandos por el ejecutable binario del comando de usuario. A partir de este momento, el proceso hijo está ejecutando el comando de usuario, y no el intérprete como había sucedido hasta ahora. Cuando el proceso hijo concluye su ejecución, ejecuta la llamada exit() que envía una señal signal()
al proceso padre, la cual le despierta y permite continuar su ejecución mostrando el símbolo de espera de nuevo comando (normalmente: > o $ en la pantalla del terminal).

Llamadas al sistema para la creación y terminación de procesos

Las llamadas al sistema que existen en Unix con respecto a procesos son:
a.)

Fork()

> permite crear un nuevo proceso que inicialmente es una copia exacta del proceso que ha realizado la llamada.
b.)

Exec()

> permite ejecutar un bloque de código en el proceso actual, sobrescribiendo todo lo que hubiera en dicho proceso actual.
c.)

Exit()

> señaliza o notifica el fin de la ejecución de un proceso hijo al proceso padre que deberá estar esperando con wait().
d.)wait() -> bloquea el proceso llamante hasta que se recibe una señal o notificación generada con exit().

1.2 Generació n de los procesos del sistema


¿cómo ha nacido el intérprete de comandos ?. Cuando el ordenador arranca el sistema operativo, se ejecuta el fichero ejecutable kernel cuya misión es cargar el núcleo del sistema operativo en memoria. El núcleo es el primer proceso del sistema, y es padre de si mismo, puesto que su PID=PPID=0. La misión del núcleo es controlar los recursos de el ordenador, por lo que delega el nacimiento de nuevos procesos en uno de sus hijos:

Init

Para cada uno de los terminales datos de alta en el ordenador y que es ese instante están usándose init crea un proceso hijo en el que se ejecuta el programa getty que solicita la conexión. Cuando ésta se obtiene, el mismo proceso se transforma en el programa login que solicita el nombre de usuario y la contraseña (si esta fue establecida). Si ambas informaciones son correctas, este proceso se convierte en el intérprete de comandos.

1.3 Ejecución de procesos en segundo plano


Cuando ejecuto una orden en línea de órdenes del tipo $orden1&, se ejecutan dos llamadas al sistema fork(): una para poder ejecutar orden1 y otro para crear una copia exacta de la shell para poder introducir otra orden.

2 Definición DE PROCESO


Proceso :


Instancia de un programa en ejecución. Hay que distinguir entre proceso y orden porque una orden puede dar lugar a la aparición de varios procesos. Un proceso es la suma de tres cosas: Programa + Recursos + Estado. A la suma de estas tres cosas también se le llama IMAGEN DE UN PROCESO, y está representado por: Código | Zona datos | Pilas | Atributo.
-

CÓDIGO

> Programa en forma no dinámica.
-

ZONA DE DATOS

> Zona donde almacena los datos.
-

PILAS

> Permite utilizar funciones.
-

ATRIBUTOS

> Describen todo el proceso. Es el Bloque de Control del Proceso (PCB).
En el PCB está toda la información que necesita el Sistema Operativo para tomar decisiones respecto a los dispositivos, memoria, etc. Y siempre está en memoria principal.

CONTENIDO DEL PCB

Consta de varios elementos:

A.)MAPA DE ESTADO DE DIRECCIONES:


especifica que bloque de memoria está utilizando un determinado proceso.

B.)RECURSOS


Especifica el conjunto de recursos que tiene asignado un proceso.

C.)PRIORIDAD DEL PROCESO:


prioridad de ejecución de un proceso. Todos los procesos tienen una prioridad asignada por defecto para efectos de planificación, pero se puede cambiar.

D.)ESTADO DEL PROCESO:


valor del estado en el que se encuentra el proceso en cada instante.
e.)PID (Identificador del Proceso): es un identificador único para cada proceso de un sistema. Es un valor numérico. Además del PID del proceso se registra el PPID (Parent PID) que es el PID del proceso padre. En Unix todo proceso tiene un padre siempre. Esta relación de parentesco no es vinculante: si le pasa algo al proceso padre no le afecta a los procesos hijos.

F.)UID:


Identificador de usuario propietario. En Unix todos los procesos los ejecuta un usuario, que no tiene por qué ser una persona. Hay usuarios especiales del sistema como adm o sys.

G.)GID:


grupo principal del usuario.

3.El control de procesos en Unix. Ordenes Bá sicas


UNIX es un sistema operativo multitarea, por lo que en todo momento es normal q encontremos más de un proceso ejecutándose y por lo tanto residente en memoria principal. El comando q averigua cuales son los procesos q se están ejecutando en un instante determinado es :
ps (Process Status). SINTAXIS: ps [parámetros]
El comando ps genera una lista con información sobre el estado de los procesos. Por defecto (sin opciones) la lista se limita a los procesos creados en el shell actual. La opción -a presenta los procesos de todos los usuarios. La opción -x lista los procesos en background q están corriendo pero q fueron creados en sesiones anteriores. La opción -r restringe la salida a los procesos que están corriendo. La opción -u informa extensamente acerca de todos los procesos q hemos seleccionado con el resto de las opciones. La información presentada es la siguiente:

USER:


dueño del proceso;

PID:

identificativo del proceso;

%CPU:

porcentaje de CPU q el proceso ha consumido en el ultimo minuto;

%MEM:

porcentaje de memoria Ram q el proceso ha consumido en el ultimo minuto;

SZ:

tamaño en KB de la pila y de los datos del proceso;

RSS:

tamaño en KB de memoria Ram q el proceso tiene asignada;

TT o TTY

Terminal de control del proceso;

STAT

Estado del proceso;

START

Momento en el q el proceso fue creado;

TIME

Cantidad de CPU consumida en seg;

COMMAND:

nombre del comando q ha creado el proceso.
Dónde el campo STAT toma los siguientes valores en función de si el proceso está:
R (corriendo), T (suspendido), P (esperando para paginar), D (en espera ocupada no interrumpible), S (durmiendo menos de 20 seg), I (durmiendo mas de 20 seg), Z (zombie).
En el caso de q STAT tenga una de las letras anteriores seguida de la letra N significa q la prioridad actual del proceso ha sido modificada con el comando nice . Si sigue una W , significa q el proceso está "swapped out". Esto quiere decir q el proceso se está ejecutando, pero sus páginas de código se han escrito en el disco para dejar espacio en la memoria de la computadora para q otro proceso se puede ejecutar.
Existen procesos que no se pueden matar con kill porque cambian su PID dinámicamente.

La orden time


Sintaxis: time orden [argumentos]
time ejecuta la orden especificada y muestra por la salida de errores estándar.
1. Tiempo transcurrido en el sistema mientras se ejecutaba la orden.
2. Tiempo consumido en la ejecución de la orden.
3. Tiempo empleado por el sistema para la ejecución de la orden (llamadas al sistema, ...).

La orden sleep


Sintaxis: sleep segundos
Suspende la ejecución durante los segundos especificados como parámetro. Se usa para ejecutar una orden después de un cierto tiempo.

Entradas relacionadas: