User Tag List

Resultados 1 al 12 de 12

Tema: Si un proceso llama a una funcion que le mata a el mismo

  1. #1

    Fecha de ingreso
    Aug 2003
    Ubicación
    Madrid (Getafe)
    Mensajes
    13,901
    Mencionado
    48 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    5
    Agradecer Thanks Received 
    221
    Thanked in
    Agradecido 164 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    2

    Si un proceso llama a una funcion que le mata a el mismo

    Pues eso.

    Un proceso llama a una funcion:
    La funcion:
    - hace algunas cosas.
    - mata al proceso que la llamo (S_KILL_TREE), si se cumple una condicion.
    - hace algunas cosas (2).


    Pregunta:
    las cosas que hay EN LA FUNCION despues de matar al proceso que la llamo se terminara de ejecutar la funcion? el proceso entiendo que no, que muere justo en esa linea no?

    Aiken

  2. #2

    Fecha de ingreso
    Jan 2008
    Mensajes
    405
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    No se como funciona exactamente Fenix, pero lo lógico sería que no siguiese ejecutando nada despues del Kill.
    Verba Volant, Escripta Manent.
    Timor Noctis.

  3. #3

    Fecha de ingreso
    Aug 2003
    Ubicación
    Madrid (Getafe)
    Mensajes
    13,901
    Mencionado
    48 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    5
    Agradecer Thanks Received 
    221
    Thanked in
    Agradecido 164 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    2
    Cita Iniciado por SpaVampyre Ver mensaje
    No se como funciona exactamente Fenix, pero lo lógico sería que no siguiese ejecutando nada despues del Kill.
    ya, pero la propia funcion que ha llamado al kill no esta "despues" del kill, esta en el mismo sitio que el kill.

    yo creo que teniendo en cuenta que fenix no es multiproceso real, seguira ejecutando al menos esa funcion, pero a ver si algun guru nos lo confirma.

    ah! estoy preguntando para 092a por si es diferent en bennu.
    Aiken

  4. #4

    Fecha de ingreso
    Mar 2003
    Ubicación
    Vallirana City
    Mensajes
    1,963
    Mencionado
    2 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    31
    Thanked in
    Agradecido 6 veces en [ARG:2 UNDEFINED] posts
    Creo recordar que cuando se usa un s_kill el proceso o procesos quedan "marcados" para matar al inicio del siguiente frame. Por lo que los procesos marcados para morir haran todo lo que tengan que hacer hasta que se encuentren un frame, esperaran ahí quietos, y moriran al inicio del siguiente frame.
    Por lo que parece la funcion hara todo lo que haya entre la orden s_kill y antes del comando frame.
    Algo así como:
    La funcion:
    - hace algunas cosas.
    - mata al proceso que la llamo (S_KILL_TREE), si se cumple una condicion. --> la funcion queda marcada para morir en el siguiente frame
    - hace algunas cosas (2).--> estas cosas si las hace
    - frame --> la funcion muere
    - mas cosas --> estas no las hace

    Saludos

    PD: Si no es así que algun GURU me corrija que a mí tambien me interesa.
    Última edición por Hokutoy; 16/10/2009 a las 10:15

  5. #5

    Fecha de ingreso
    Jan 2008
    Ubicación
    Madrid
    Mensajes
    4,451
    Mencionado
    14 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    87
    Agradecer Thanks Received 
    161
    Thanked in
    Agradecido 94 veces en [ARG:2 UNDEFINED] posts
    Si un proceso llama a una función o crea otro proceso que chequea algo y mata al proceso llamante, no es inmediato, porque depende de la gestión de procesos de Fénix. Lo de matar es una "señal" que se manda para matar al proceso, es como un mensaje que se encola para ser procesado. Se usa mucho en programación concurrente.
    La solución sería por ejemplo que la función devuelva falso si el proceso no debe ejecutar las instrucciones que quedan, o usar una variable privada "activo" del propio proceso.
    Última edición por hardyx; 16/10/2009 a las 09:15

  6. #6

    Fecha de ingreso
    Jul 2006
    Mensajes
    427
    Mencionado
    2 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    8
    Agradecer Thanks Received 
    14
    Thanked in
    Agradecido 9 veces en [ARG:2 UNDEFINED] posts
    ¿y para matar a tu propio proceso porque no haces un exit? Con eso consigues que no siga ejecutando nada.
    In the very beginning it was an angelical society but Eve took a “Byte” from the “Apple” and then mistrust was born.

  7. #7

    Fecha de ingreso
    Aug 2003
    Ubicación
    Madrid (Getafe)
    Mensajes
    13,901
    Mencionado
    48 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    5
    Agradecer Thanks Received 
    221
    Thanked in
    Agradecido 164 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    2
    Cita Iniciado por animanegra Ver mensaje
    ¿y para matar a tu propio proceso porque no haces un exit? Con eso consigues que no siga ejecutando nada.
    yo no he dicho que no quiera que siga, he preguntado que pasa en ese caso. y concretamente lo que quiero es que si que siga.

    y en realidad es que es mas complicado, porque el proceso no se mata a si mismo, la funcion que lo mata, mata al padre de mi proceso ordenando que muera la descendencia, es decir que ... no se esta matando asi mismo directamente, asi que no puedo hacer un exit.

    Aiken

  8. #8

    Fecha de ingreso
    Sep 2005
    Mensajes
    15,150
    Mencionado
    248 Post(s)
    Tagged
    1 Tema(s)
    Agradecer Thanks Given 
    663
    Agradecer Thanks Received 
    1,838
    Thanked in
    Agradecido 1,258 veces en [ARG:2 UNDEFINED] posts
    Primero me gustaría que aclarases si el primer proceso llama a otro proceso o a una función, porque son cosas distintas.
    Si es una función no sé cómo se comportaría, pero si es un proceso sí.

    Si estás usando Fenix en una versión antigua (no recuerdo en cual se hizo el cambio, pero en la 083b funcionaba así), cuando invocas un signal este espera al siguiente frame para ejecutarse.
    En las modernas no, tal como las llamas eliminan a los procesos, y en el caso de s_kill_tree a todos sus hijos AUNQUE ESTE MISMO SEA EL QUE LO LLAMA, en este caso:
    -hace cosas.
    -hace el s_kill_tree.
    -muere.

    En Bennu hay una alternativa, y es que puedes especivicar una seccion llamada ON EXIT (es como la seccion private o begin) en la que puedes escribir todas las acciones que quieres que haga antes de desaparecer definitivamente. Se ejecuta al acabar su propio código o al recibir una señal de muerte.

    Por cierto: tened mucho cuidado al usar s_kill_tree, pues mata a un proceso y todos sus hijos, y si no tienes controlado el arbol de dependencias... O peor, si el proceso no existe se puede matar al main y todos sus hijos y los procesos huérfanos, o tener un comportamiento muy extraño. Recuerdo que existe s_kill para matar a un único proceso.
    PROYECTOS REALIZADOS: FrikiMusic, Motor Scroll Tileado v3.2, Venturer2X (GP2X/WIZ), Echo, Screen Break Time
    PROYECTOS EN MARCHA (algunos): Bennu GP2X: 95% (necesito ayuda) ¡Antes de Halloween!: 92% SpaceH2H: 8%

  9. #9

    Fecha de ingreso
    Jan 2008
    Mensajes
    405
    Mencionado
    0 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    0
    Agradecer Thanks Received 
    0
    Thanked in
    Agradecido 0 veces en [ARG:2 UNDEFINED] posts
    En el fondo, y sin tener yo idea de fenix, para que quieres hacer eso?
    Verba Volant, Escripta Manent.
    Timor Noctis.

  10. #10

    Fecha de ingreso
    Sep 2006
    Ubicación
    Malaga
    Mensajes
    7,540
    Mencionado
    47 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    1,655
    Agradecer Thanks Received 
    1,918
    Thanked in
    Agradecido 1,287 veces en [ARG:2 UNDEFINED] posts
    Es mejor y mas facil de seguir si pones una variable interna a true y al final si esta a true te matas o sales del proceso (no programo en fenix)

    No es muy elegante el suicidarte. En caso del fenix como es interpretado quien sabe si en una nueva version vas a tener problemas con el interprete....

  11. #11

    Fecha de ingreso
    Aug 2003
    Ubicación
    Madrid (Getafe)
    Mensajes
    13,901
    Mencionado
    48 Post(s)
    Tagged
    0 Tema(s)
    Agradecer Thanks Given 
    5
    Agradecer Thanks Received 
    221
    Thanked in
    Agradecido 164 veces en [ARG:2 UNDEFINED] posts
    Entradas de blog
    2
    Cita Iniciado por Drumpi Ver mensaje
    Primero me gustaría que aclarases si el primer proceso llama a otro proceso o a una función, porque son cosas distintas.
    Si es una función no sé cómo se comportaría, pero si es un proceso sí.

    uno es proceso ventana()
    y otro es el proceso boton_cerrarventana(), hijo de ventana().

    y la funcion se llama cerrarventana() y lo que hace es hacer un s_kill_tree del proceso ventana por lo que muere la ventana con todo lo que hay dentro, incluido el propio boton_cerrarventana que fue al que llamo a la funcion.

    a que ahora si se entiende

    Aiken
    < - >
    Cita Iniciado por Drumpi Ver mensaje
    En Bennu hay una alternativa, y es que puedes especivicar una seccion llamada ON EXIT
    en bennu? lo tengo puesto en fenix, creo que concretamente en ese boton, para que cuando muera haga un delete del texto del boton y funciona bien en fenix 092.

    Aiken
    < - >
    Cita Iniciado por Drumpi Ver mensaje
    Por cierto: tened mucho cuidado al usar s_kill_tree, pues mata a un proceso y todos sus hijos, y si no tienes controlado el arbol de dependencias... O peor, si el proceso no existe se puede matar al main y todos sus hijos y los procesos huérfanos, o tener un comportamiento muy extraño. Recuerdo que existe s_kill para matar a un único proceso.
    yaya, pero como comprenderas para matar a una ventana, y que mate a los botones y objetos que tiene dentro la ventana lo mas comodo es un s_kill_tree

    Aiken
    Última edición por Aiken; 16/10/2009 a las 22:05 Razón: Edición automática anti doble-post.

  12. #12

    Fecha de ingreso
    Sep 2005
    Mensajes
    15,150
    Mencionado
    248 Post(s)
    Tagged
    1 Tema(s)
    Agradecer Thanks Given 
    663
    Agradecer Thanks Received 
    1,838
    Thanked in
    Agradecido 1,258 veces en [ARG:2 UNDEFINED] posts
    Cita Iniciado por Aiken Ver mensaje
    uno es proceso ventana()
    y otro es el proceso boton_cerrarventana(), hijo de ventana().

    y la funcion se llama cerrarventana() y lo que hace es hacer un s_kill_tree del proceso ventana por lo que muere la ventana con todo lo que hay dentro, incluido el propio boton_cerrarventana que fue al que llamo a la funcion.

    a que ahora si se entiende
    Si, se entiende, así que es lo que te he dicho: signal funciona inmediatamente, sin ejecutar más código.

    Cita Iniciado por Aiken Ver mensaje
    en bennu? lo tengo puesto en fenix, creo que concretamente en ese boton, para que cuando muera haga un delete del texto del boton y funciona bien en fenix 092.
    Es posible que estuviese en esa versión de Fenix, es una en las que Splinter metió mano y hubo tantos cambios que me cuesta saber de memoria en qué version se añadió/cambió/quitó tal cosa (toda la info que doy es de memoria, no suelo consultar salvo que tenga el archivo de ayuda de Fenix083b a mano).
    Si, puede que exista en Fenix, ahora que lo mencionas, y creo que fue uno de esos cambios "radicales" que les sentó mal a más de uno (en su día, debo confesar, que a mi también)... pero mira por donde, a los novatos les viene de lujo y es una gran ayuda.

    Cita Iniciado por Aiken Ver mensaje
    yaya, pero como comprenderas para matar a una ventana, y que mate a los botones y objetos que tiene dentro la ventana lo mas comodo es un s_kill_tree
    En ese caso te recomiendo que no sea el hijo el que mate al padre y a los demás, eso debería ser trabajo del padre, por lo que le tienes que mandar una señal de alguna forma.
    Yo aun le estoy dando vueltas porque quiero rehacer mi tilemap editor, y de momento, el mejor método que he conocido (basándome en otros lenguajes que he ido viendo), es que cada ventana sea controlada por un proceso padre (con el gráfico del fondo de la ventana, si quieres), con una serie de variables privadas que son modificadas por sus hijos mediante punteros (valores numéricos, variables booleanas...) y una variable LOCAL que podríamos denominar "señal_entrada", que vale 0 salvo que uno de sus hijos quiera indicarle al padre que realice una acción, por ejemplo:
    -1: crear un proceso determinado.
    -2: matar hijos, descargar recursos y cerrar ventanas.
    -3: llamar a sub-ventana y pasar el arbol a "freeze".
    Obviamente, una vez acabe de realizar la acción, debería pasar a cero antes de volver a su ejecución normal.

    Si habeis trabajado con algun lenguaje visual de windows para hacer ventanas y demás, lo comprenderéis. Yo lo hice en un laboratorio, de instrumentación, creo que era con LabView o similar...
    PROYECTOS REALIZADOS: FrikiMusic, Motor Scroll Tileado v3.2, Venturer2X (GP2X/WIZ), Echo, Screen Break Time
    PROYECTOS EN MARCHA (algunos): Bennu GP2X: 95% (necesito ayuda) ¡Antes de Halloween!: 92% SpaceH2H: 8%

Permisos de publicación

  • No puedes crear nuevos temas
  • No puedes responder temas
  • No puedes subir archivos adjuntos
  • No puedes editar tus mensajes
  •