Orden de muerte al matar con S_KILL_TREE

Started by Windgate, September 30, 2009, 05:49:35 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

FreeYourMind

Antes de probar un reparo, el proceso a(), seria así:

process a()
 
begin
b();
             end


FreeYourMind

Tu ejemplo de debug comprueba mis resultados:

Esto ocurre siempre:

"muerte de a"
"b esta vivo"

o sea, b nunca muere y deberia.

DjSonyk

Pero si lo haces asi,eso quedaria asi ....

Creo el proceso "A" ,el proceso "A" crea el proceso "B", el proceoso "A" llega a su fin y desaparece , y el proceso "B" queda huerfano... con lo que no puedes enviar una señal a "A" porque ya no existe en el siguiente FRAME...
aun asi, S_kill_tree, ya no te funcionaria puesto que "B" ya no tiene madre/padre como lo querais llamar...

FreeYourMind

Grácias ya me has resuelto las dudas, entonces como ya no tengo a() (tampoco necesito mantenerlo vivo con el loop frame) pues entonces lo correcto es matar el hijo huerfano b() con s_kill.
Karma Up.

SplinterGU

#19
:P

free, siempre es importante poner el codigo de prueba que confirme lo que vos decis no esta funcionando, asi nos evitamos paginas de respuestas y vos (y todos nosotros) tambien evitamos perder tiempo valioso.

si hubieses puesto ese codigo, e incluso el que mata, se te hubiese respondido mas rapido.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Lo se, pero si decia que el a() sólo creaba el proceso b(), logicamente con esto digo, que en a() no hago nada más que esto.  :D

SplinterGU

cuando decis eso, suponemos que a() hace otras cosas y estas en un loop con frame, o sea, la logica no esta en lo que decis, la logica esta en que nunca podemos imaginar (por lo menos yo) que se te ocurriria hacer un kill a un proceso que murio, por eso puse el avatar con lengua, puff; un error de novatos, y vos no sos novato en esto.

DjSonyk, karma para ti.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DjSonyk

Naa Splinter ultimamente me aburro que no se habla mucho por aqui,y entre desesperación y pegandome con los dichos graficos de las narices,pues hacer algo util me relaja,con todas las cosillas que tengo en mente por hacer y atascado por no saber pintar ,en fin,por cierto me alegro que te sacara la duda Free... ^^

FreeYourMind

Quote from: SplinterGU on July 22, 2010, 03:43:58 PM
cuando decis eso, suponemos que a() hace otras cosas y estas en un loop con frame


SplinterGU

si, yo he estado desaparecido un tiempo, me estoy recuperando de una operacion de hemorroides que me hicieron este sabado pasado, y aun no fui al servicio, y entre los calmantes que me dejan palmado, me tiene un poco molesto eso.


free, quizas no me supe explicar, disculpame... lo que digo es que no es logico que quieras matar un proceso que no existe, si vos decis que mandas una señal kill_tree a a() para que mate a el y a su hijo, es porque vos (free) ya sabes que ambos estan vivos, sino no tiene logica.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

FreeYourMind

Joer, es que te tienes que disculpar por todo  ;D
Sobre lo de suponer, ni te digo los ojos que me echaba mi jefe cada vez que le decia "supongo" sobre algo del proyecto, heheehh  ;D

Sobre el proceso, pues ya ni me acordaba que estos morian al final, así de sencillo  ;)

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Drumpi

Yo lo que veo es un error garrafal el hacer:
signal(type a,s_kill_tree);
No tiene sentido: type a tendrá un valor que no tiene nada que ver con la ID de un proceso, sino un valor interno del planificador que lo cataloga como tipo de proceso.
Para obtener la ID de un proceso se usa get_id(type a), así sí, máxime si sólo existe un proceso a (porque nos devolverá su ID). Si hay más de un proceso a, o b, tendrás que identificar el que buscas mediante una de sus variables locales o públicas.
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

SplinterGU

puede tener sentido, imaginate que tengo un proceso entidad, dicho proceso tiene varios miembros que le pertenecen, es util poder querer matar al proceso tipo entidad y a todos los miembros del mismo, pensa, personaje, que tiene brazos, piernas, cabeza, pies, manos, yo quiero matar todos los tipo personaje y que se vaya todo, yo cuando cree el proceso cree el proceso "personaje" y no se, ni tengo que saber, si personaje es 1 solo proceso o son muchos, a mi no me interesa, a mi solo me interesa que muera, entonces el kill type con tree es lo que se debe hacer, tambien podemos usar el metodo onexit y hacer que personaje mate a todos, eso es mas correcto, pero pensa que eso no existia antes.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

DjSonyk

Yo estoy viendo que os liais mucho con algunas sentencias,pensais que hacen otra cosa a la que estan destinada o no se...
Pero signal(type a,s_kill_tree) significa "Mata todos los procesos A y a sus descendientes..." mas exactamente,"Mata todos los procesos "A" QUE ESTEN VIVOS y a sus descendientes...",esta señales para los descendientes de A,que su madre (A)  halla muerto no les dice nada,vamos no les matan...
Evidentemente querer mata a un tipo de proceso A especifico no se puede hacer con Type,pues mata a todos los procesos de ese tipo y si te las arreglaras para enviar solo un signal(type a,s_kill_tree) podrias destruir cualquier proceso A y seguramente no el que quisieras, para eso hay que hacerlo de otra forma, ya sea poniendole un identificador al crearle,pasarle un parametro al crearlo ,ect..
Aun me queda por decir, que todas las sentencias que he usado en Bennugd,no todas pero muchisimas,hacen exactamente lo que tiene que hacer o hacen lo que hacian en DIV ,el usarlas bien o mal ya solo depende del propio programador...