procesos en ubuntu

Upload: informatico3018

Post on 14-Feb-2018

215 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/23/2019 Procesos en Ubuntu

    1/10

    1. PROCESOS1

    1.1 Conceptos GeneralesProceso:

    Programa o comando en ejecucin.

    Caractersticas:

    Un proceso consta de cdigo, datos y pila.

    Los procesos existen en una jerarqua de rbol (arios !ijos, un solo padre".

    #l sistema asigna un identi$icador de proceso (PID" %nico al iniciar el proceso.

    #l plani$icador de tareas asigna un tiempo compartido para el proceso seg%n su prioridad (slo root

    puede cambiar prioridades".

    Ejecucin en primer plano:

    Proceso iniciado por el usuario o interactio.

    Ejecucin en segundo plano:

    Proceso no interactio que no necesita ser iniciado por el usuario.

    Demonio:

    Proceso en segundo plano siempre disponible, que da sericio a arias tareas (debe ser propiedaddel usuario root".

    Proceso zomi:

    Proceso parado que queda en la tabla de procesos !asta que termine su padre. #ste !ec!o seproduce cuando el proceso padre no recoge el cdigo de salida del proceso !ijo.

    Proceso !u"r#ano:

    Proceso en ejecucin cuyo padre !a $inali&ado. #l nueo identi$icador de proceso padre ( PPID"

    coincide con el identi$icador del proceso init (1).

    1.$ Ejecucin de comandos

    1.$.1 Surutina s%stem

    Descripcin:

    Llamada a un int'rprete para ejecutar un comando.

    #l proceso espera a que $inalice la ejecucin de la subrutina y deuele la salida del programaejecutado.

    &ormato:

    #include

    int system (cadena)

    const char *cadena;

    Par'metro:

    cadena )omando a ejecutar.

    De(uel(e:

    #stado de salida del programa ejecutado. 1 o 1*+ en caso de error.

    Comentarios:

    a" e crea un proceso !ijo (fork" y se lan&a (eec" !usr!bin!bsh, que interpreta el comando a

    ejecutar.

    b" i la llamada se !ace con camino seguro, la orden eecejecuta el int'rprete !usr!bin!tsh.

    1 Tomado de: DOCTORADO EN INFORMTICA - PROGRAMACIN DE SISTEMAS UNIX: COMUNICACIN ENTREPROCESOS - RAMN M. GMEZ LABRADOR - UNIO 1.!!" #$%%&:''e(.%)d&.o*+'U,e*(%a*o('(em,a*o-1.$%m)/

    -1-

  • 7/23/2019 Procesos en Ubuntu

    2/10

    c" e ignoran las se-ales "II$%y "I&'I%y se bloquea la se-al "ID.

    d" La salida de systemno a$ecta a la salida de los procesos !ijos del proceso ejecutor.

    Ejemplo:

    !* system.c + istar los ,rocesos del usuario usando system. *!

    #include #include

    int main ()

    -

    int salida; !* "alida del comando *!

    char comando1//0; !* omando a eecutar *!

    ,rintf(23em,lo de system.4n2);

    s,rintf(comando5 2!bin!,s +fu 6s25 7eten8(2'"392));

    salida : system (comando);

    ,rintf(2"alida del comando 6d4n25 salida);

    eit(salida);

    3em,lo de system.

    '"39 PID PPID %%= D

    ramon ?@?A 1 hft!/ +ksh

    ramon 1//AB 1/@// hf,!/ !bin!,s +fu ramon

    ramon 1/@// 11@C? hft!/ bsh bsh bsh

    ramon 11@C? ?@?A hft!/ system.c

    "alida del comando /

    uponiendo que no existe el comando '"y sustituyendo la ejecucin de systempor la siguiente lnea,

    se obtiene la salida mostrada a continuacin.

    salida : system (2'" E3%I2);

    3em,lo de system.

    bsh '" no encontrado.

    "alida del comando CF@

    1.$.$ Surutinas e)ec

    Descripcin:

    #jecuta un nueo programa en el mismo proceso.

    e crea un proceso imagen sustituyendo el programa actual por el nueo.&ormatos:

    #include int eecl (camino5 ar7/ 5 ar715 ...0 5 /)const char *camino5 *ar7/5 *ar715 ...;

    int eecle (camino5 ar7/ 5 ar715 ...0 5 /5 ,Gentorno)const char *camino5 *ar7/5 *ar715 ...;char *const ,Gentorno0;

    int eecl, (fichero5 ar7/ 5 ar715 ...0 5 /)const char *fichero5 *ar7/5 *ar715 ...;

    int eec8 (camino5 8alGar7s)

    const char *camino;char *const 8alGar7s0;

    -$-

  • 7/23/2019 Procesos en Ubuntu

    3/10

    int eec8e (camino5 8alGar75 ,Gentorno)const char *camino;char *const 8alGar7s05 *,Gentorno0;

    int eec8, (fichero5 8alGar7s)const char *fichero;char *const 8alGar7s0;

    int eect (camino5 8alGar75 ,Gentorno)char *camino5 *8alGar7s5 *,Gentorno0;

    Su#ijos:

    L Usa lista de parmetros, el %ltimo debe ser .

    / Usa matri& de parmetros generada preiamente, el %ltimo debe ser .

    0 0ra&ado del programa con ptrace (en desuso".

    # Usa la matri& de ariables de entorno.

    P %squeda utili&ando la ariable P203.

    Par'metros:

    camino )amino completo del $ic!ero ejecutable.fichero 4ombre del $ic!ero ejecutable.

    ar7$ 2rgumento 4'simo.

    8alGar7s Puntero a la matri& de argumentos.

    ,Gentorno Puntero a la matri& del entorno.

    De(uel(e:

    1, en caso de error.

    Comentarios:

    a" La rutina principal (main" de un programa ) ejecutable recibe los siguientes parmetros5

    int main (contGar7s5 8alGar7s5 ,Gentorno)int contGar7s; !* ontador de ar7umentos. *!

    char *8alGar7s; !* Puntero a la matriH de ar7umentos. *!

    char *,Gentorno; !* Puntero a la matriH del entorno. *!

    Las ariables 8alGar7sy ,Gentornoson similares a las utili&adas en las subrutinas eec.

    b" #sta rutina principal llama a una subrutina de iniciacin que construye la ariable de entrono. 6ic!aariable global es accesible desde el programa declarndola de la siguiente manera5

    etern char **en8iron;

    Las subrutinas eecque no usan el parmetro ,Gentornoutili&an la ariable en8iron.

    c" Los descriptores de $ic!eros abiertos se pasan al nueo proceso imagen, excepto los que tenganactio el bit DG3J3(er fcntl".

    d" Las se-ales capturadas se reasignan a sus acciones por de$ecto7 las ignoradas, contin%an siendoignoradas (er si7action".

    e" i el nueo proceso imagen tiene actio el bit "'ID, la identi$icacin e$ectia de usuario (3'ID" del

    nueo proceso toma el alor del identi$icador del propietario. 8dem, si tiene actio el bit "ID.

    $" Los identi$icadores reales de usuario y de grupo (9'IDy 9ID" mantienen el alor que tenan en el

    proceso llamador.

    g" #l prra$o anterior puede aplicarse a $ic!eros remotos (preia traduccin de los identi$icadores".

    !" #l prra$o e" no a$ecta a las shell+scri,ts.

    i" #l proceso nueo mantiene las siguientes caractersticas del proceso llamador5

    8denti$icadores de proceso (PID", de proceso padre (PPID" y de grupo de procesos (PID".

    -*-

  • 7/23/2019 Procesos en Ubuntu

    4/10

    /alores de prioridad (nice", de %%=y del bit de tra&ado.

    6irectorio actual y directorio ra&.

    9scara de $ic!eros, limites de longitud de $ic!eros, lmites de recursos.

    0iempos para actiar alarmas y subrutinas times.

    8denti$icador de usuario de conexin.

    Ejemplo:

    !* eec.c + istar los ,rocesos del usuario usando eec. *!

    #include

    #include

    #include

    int main ()

    -

    int salida; !* "alida del comando *!

    ,rintf(23em,lo de eec.4n2);

    eecl(2!bin!,s252,s252+fu257eten8(2'"392)5$');

    ,rintf(2"alida del comando 6d4n25 salida);

    eit(salida);

    3em,lo de system.

    '"39 PID PPID %%= D

    ramon ?@?A 1 hft!/ +ksh

    ramon 1/K?B ?@?A hft!/ !bin!,s +fu ramon

    uponiendo que no existe el comando '"y sustituyendo la ejecucin de eeclpor la siguiente lnea, seobtiene la salida mostrada a continuacin.

    salida : eecl (2'"25 2E3%I25 /);

    3em,lo de eec.

    "alida del comando +1

    1.* Creacin de procesos

    1.*.1 Surutina fork:

    Descripcin:

    )rea un nueo proceso (!ijo", copia casi exacta del proceso generador (padre".

    &ormato:

    #include

    ,idGt fork ();

    De(uel(e:

    al proceso !ijo y P86 del !ijo al proceso padre (1, si error".

    Comentarios:

    a" La ersin 6 (en la librera libbsd.a" es5

    int 8fork ();

    -+-

  • 7/23/2019 Procesos en Ubuntu

    5/10

    b" 2tributos que !ereda el proceso !ijo.

    #ntorno.

    it &D,C-OEECpara cada descriptor de $ic!ero.

    e-ales capturadas.

    U86 y :86.

    #stado de priilegios y prioridades.

    Libreras compartidas y segmentos de memoria compartida.

    P:86 y 00;:86.

    6irectorio actual y directorio ra&.

    9scara y lmites de medida para $ic!eros.

    #entos y estado de auditora.

    #stado de depuracin.

    c" 2tributos di$erenciadores entre padre e !ijo5

    P86 %nico.

    PP86 distintos (el PP86 del !ijo coincide con el P86 del padre".

    #l proceso !ijo tiene su propia copia de los descriptores de $ic!ero del padre, pero compartecon 'ste un puntero a $ic!ero para cada descriptor del proceso padre.

    loqueos de proceso, texto y datos no se !eredan.

    Las subrutinas times se ponen a .

    Las alarmas pendientes toman su alor inicial.

    e eliminan las se-ales pendientes para el proceso !ijo.

    Ejemplo:

    !* fork.c + 3ecuciLn conunta de ,rocesos ,adre e hio *!

    #include #include #include

    main ()-

    ,rintf(23em,lo de fork.4n2);,rintf(2Inicio del ,roceso ,adre. PID:6d4n25 7et,id());

    if (fork() :: /)-

    !* Proceso hio *!,rintf (2Inicio ,roceso hio. PID:6d5 PPID:6d4n25 7et,id()5 7et,,id());slee,(1);

    else -

    !* Proceso ,adre *!,rintf(2ontinuaciLn del ,adre. PID:6d4n25 7et,id());slee,(1);

    ,rintf(2in del ,roceso 6d4n25 7et,id());eit(/);

    3em,lo de fork.Inicio ,roceso ,adre. PID:A1F?Inicio ,roceso hio. PID:@@1A5 PPID:A1F?ontinuaciLn ,roceso ,adre. PID:A1F?in del ,roceso @@1Ain del ,roceso A1F?

    -/-

  • 7/23/2019 Procesos en Ubuntu

    6/10

    Ejemplo:

    !* forkGhuerf.c + 3em,lo de ,roceso huMrfano *!

    #include #include #include

    main ()

    -,rintf(23em,lo de ,roceso huMrfano.4n2);,rintf(2Inicio del ,roceso ,adre. PID:6d4n25 7et,id());

    if (fork() :: /)-

    ,rintf (2Inicio ,roceso hio. PID:6d5 PPID:6d4n257et,id()5 7et,,id());slee, (1);,rintf (23l ,roceso Nueda huerfano. PID:6d PPID:6d4n257et,id()5 7et,,id());

    else

    ,rintf (2ontinuaciLn del ,adre. PID:6d4n25 7et,id());

    ,rintf (2in del ,roceso 6d4n25 7et,id());eit (/);

    3em,lo de ,roceso huMrfano.Inicio ,roceso ,adre. PID:11??/Inicio ,roceso hio. PID:@O@K5 PPID:11??/ontinuaciLn ,roceso ,adre. PID:11??/in del ,roceso 11??/punto indicativo> 3l ,roceso Nueda huMrfano. PID:@O@K5 PPID:1in del ,roceso @O@K

    0otas:

    #n el ejemplo, el proceso padre no espera la $inali&acin del proceso !ijo y termina antes que 'ste.

    )uando un proceso queda !u'r$ano, el proceso de iniciacin (init" se conierte en su padre.

    Una e& que $inali&a el proceso padre, se deuele el control al int'rprete de comandos, de a! que

    apare&ca el mensaje del

  • 7/23/2019 Procesos en Ubuntu

    7/10

    215 =aitpid act%a igual que =ait, esperando cualquier !ijo.

    345 P86 de un proceso !ijo determinado.

    45 Para cualquier !ijo con el mismo grupo de procesos que el padre.

    5215 Para cualquier !ijo cuyo grupo de proceso sea igaul al alor absoluto de P86.

    >pciones. 9scara de opciones. us bits son5

    R$S$5 eita la suspensin del padre mientras est' esperando a alg%n !ijo.

    R'$%9S3D5 el padre obtiene in$ormacin adicional si el !ijo recibe alguna de las se-ales

    "I%%I$, "I%%', "I""%Po "I%"%P.

    #stados. Puntero a una tabla con los estados de salida de los procesos.

    De(uel(e:

    4, si no !a terminado ning%n proceso.

    6acros:

    RI"%PP3D (estado) !* T:/5 si estado es de un hio ,arado *!

    ,idGt estado;

    int R"%P"I (estado) !* $U de seVal Nue ha causado la ,arada *!

    ,idGt estado;

    RI3JI%3D (estado) !* T:/5 si estado es de salida normal *!

    ,idGt estado;

    int R3JI%"%S%'" (estado) !* A bits baos del estado de salida *!

    ,idGt estado;

    RI"I$S3D (estado) !* T:/5 si estado es de salida anormal *!

    ,idGt estado;

    int R%39"I (estado) !* $U de saVal Nue ha causado la slida *!

    ,idGt estado;

    Cometarios:

    a" #stas subrutinas pueden erse a$ectadas por la se-al "ID(er si7action".

    b" La subrutina Qaitespera la terminacin de cualquier proceso !ijo.

    Ejemplos:

    !* Qait,id.c + 3s,erar la terminaciLn de un ,roceso hio *!

    #include #include #include

    #include

    int main(8oid)-

    ,idGt idG,adre; !* PID del ,roceso ,adre *!,idGt idGhio; !* PID del ,roceso hio *!

    int estado; !* 3stado de salida *!

    ,rintf(23em,lo de Qait,id.4n2);,rintf(2Inicio ,roceso ,adre. PID:6d4n25 7et,id());idG,adre : 7et,id();if ((idGhio : fork()) :: /)- !* Proceso hio *!

    ,rintf(2Inicio ,roceso hio. PID:6d5 PPID:6d4n257et,id()5idG,adre);slee,(?);

    -7-

  • 7/23/2019 Procesos en Ubuntu

    8/10

    ,rintf(2"alida ,roceso hio. PID:6d4n257et,id());eit(7et,id() > idG,adre); !* 15 si PID > PPID *!

    else-

    si7nal("II$%5 "IGI$); !* I7norar %9+ *!Qhile(Qait,id(idGhio5 Westado5 /) T: idGhio);if(RI"I$S3D(estado))

    ,rintf(23l ,roceso hio ha recibido la seVal 6d4n25R%39"I (estado));if(RI3JI%3D(estado))-

    ,rintf(23stado de salida del ,roceso hio 6d4n25R3JI%"%S%'" (estado));if (R3JI%"%S%'"(estado) :: 1)

    ,rintf(2PID hio > PID ,adre.4n2);else

    ,rintf(2PID ,adre > PID hio.4n2);

    ,rintf(2in del ,roceso 6d4n25 7et,id());eit(/);

    3em,lo de Qait,id.

    Inicio ,roceso ,adre. PID:COC1?Inicio ,roceso hio. PID:?1@?A5 PPID:COC1?in ,roceso hio. PID:?1@?A3stado de salida del ,roceso hio 1PID hio > PID ,adrein del ,roceso COC1?

    La salida siguiente muestra el e$ecto de generar una se-al de interrupcin pulsando ?C8R-@?C@. 6ic!a se-alprooca la terminacin automtica del proceso !ijo, mientras que el proceso padre la ignora (er si7nal".

    3em,lo de Qait,id.Inicio ,roceso ,adre. PID:KCO/Inicio ,roceso hio. PID:FK/F5 PPID:KCO/X3l ,roceso hio ha recibido la seVal Cin del ,roceso KCO/

    1.+ 8erminacin de un proceso

    1.+.1 Surutina eit:

    Descripcin:

    0ermina la ejecucin de un proceso.

    &ormato:

    #include

    8oid eit (estado)

    int estado;

    Par'metro:

    #stado de salida del proceso.

    Comentarios:

    a" #l proceso de salida de un proceso es el siguiente5

    Llamada a la $uncinGcleanu,para limpiar las reas de #A.

    Llamada a la subrutina especi$icada en la subrutina ateit.

    Llamada a la subrutinaGeitpara $inali&ar el proceso.

    b" iGcleanu,no puede cancelar las peticiones de #A asncrona, la aplicacin se bloquea !astaque se completen dic!as peticiones.

    -9-

  • 7/23/2019 Procesos en Ubuntu

    9/10

    c" e cierran todos los descriptores de arc!io.

    d" i el proceso padre est en espera (er Qait", se deuele el alor de los B bits menos

    signi$icatios del estado de salida.

    e" e ena una se-al "IDal proceso padre. La accin por de$ecto es ignorar esta se-al. i no

    se ignora, el proceso !ijo puede quedar como proceso &ombi.

    $" La salida de un proceso no prooca la terminacin de sus !ijos. #l PPIDde los !ijos ser el PPID

    del proceso init(1".

    g" e eliminan los bloqueos de arc!ios (er fcntl".

    !" i para un proceso perteneciente a un grupo !u'r$ano, se enan las se-ales "I'Py "I$%a

    cada proceso del grupo de procesos !u'r$anos.

    1.+.$ Surutina ateit:

    Descripcin:

    #jecuta una determinada $uncin antes de la terminacin del proceso.

    &ormato:

    #include

    int ateit (funciLn)

    8oid (*funciLn) (8oid);

    Par'metro:

    Puntero a la $uncin llamada.

    De(uel(e:

    45 si no !ay errores.

    Comentarios:

    a" La $uncin se ejecuta si se !a completado con 'xito la subrutinaGcleanu,.

    Ejemplo:

    !* ateit.c + 3ecuciLn de una rutina al salir de un ,ro7rama *!

    #include #include #include

    int bucle:/; !* ontador de 8ueltas del bucle *!

    8oid salida(); !* Prototi,o de la funciLn de salida *!

    int main(8oid)-

    int n;

    ateit(salida);

    ,rintf(23em,lo de ateit.4n2);

    for (bucle:1; bucle ?////)

    eit N(1);eit (/);

    8oid salida()-

    --

  • 7/23/2019 Procesos en Ubuntu

    10/10

    ,rintf(23l bucle ha dado 6d 8ueltas.4n25 bucle);,rintf(2asta lue7o ucas.4n2);

    3em,lo de ateit.1+1@A?A C+FKFA ?+1/11? O+1KF1F F+?1/F13l bucle ha dado F 8ueltas.asta lue7o ucas.

    -14-