Título: ¿Como coger el PID de un proceso hijo que ha hecho Event.set()? | Python3 multiprocessing Event Publicado por: Drakaris en 13 Noviembre 2021, 20:47 pm Buenas. Estoy haciendo una arquitectura servidor-multicliente con sockets in python3
Para esto utilizo la libreria multiprocessing Código En este código, la variable 'event' is un evento de la libreria multiprocessing que esta en escucha de que algún proceso hijo lo active. Código
Ejecuto un hilo que ejecutará el metodo estatico handlerEvent de la clase Client que se encargará de ver si la variable 'event' es activado Código
En el while ejecuto un subproceso, haciendo que para cada cliente que se conecte este se ejecutará en un proceso hijo. La clase Client es la siguiente: Código
La idea es la siguiente: El cliente se conecta y este se ejecuta la clase Client en un proceso hijo. Y así para cada cliente que se conecte. En el segundo cliente se ejecuta la clase Client en otro proceso hijo y así consecutivamente.... Vale, pues. El init de la clase tengo try...except para si el cliente se cierra este ejecuta el exception (alguno de los dos). Pero siempre cuando se cierra un cliente se ejecutará el finally (el primero). Que se encargará de hacer: Código Y después se ejecutará el finally: Código
Por la cual el metodo handlerEvent de la clase Client detectará que el event es true Código y ejecutará lo que hay dentro del if. Mi idea es coger el PID del proceso hijo que ha hecho el event.set(). Pues así puedo hacer un for y matar el proceso que coincida con el PID. Pero como lo hago? En el cliente cuando hago el: Código puedo obtener el PID del proceso hijo haciendo: Código
Sí hago esto si me obtiene el PID del hijo, pues este PID tendría que enviarlo al handlerEvent() como puedo hacer esto? (https://i.stack.imgur.com/Bd6Mp.jpg) (https://i.stack.imgur.com/QgKHP.jpg) Si alguíen tiene alguna idea de como puedo hacerlo o alguna alternativa, lo agradeceria. Gracias. Título: Re: ¿Como coger el PID de un proceso hijo que ha hecho Event.set()? | Python3 multiprocessing Event Publicado por: Drakaris en 6 Diciembre 2021, 12:23 pm En realidad, mi pregunta era.... Como matar un proceso zombie cuando el proceso cliente se cierra.
(https://i.stack.imgur.com/CjhAk.png) (https://i.stack.imgur.com/0lhkj.png) (https://i.stack.imgur.com/goFUX.png) (https://i.stack.imgur.com/ZaXNs.png) Para solucionar esto lo que hice es.... cuando esta escuchando clientes, además de iniciar un proceso hijo que será el cliente que se quiere conectar, creo un hilo en el proceso padre que estará en escucha de un evento que lo paso como parametro al proceso hijo del cliente. Y este que se activa al querrer cerrar el cliente, gracias al hilo obtendrá el evento activado y se encargará de unir el proceso hijo del cliente al proceso padre. Después hace un break para acabar el hilo Y finalmente se cierra el cliente. Pasos que he hecho: Primero, cuando escucho a los clientes, añado: Código
Después in the nuevo metodo de la clase ClientsListener, cambio: Código por Código cambio el nombre del metodo. No es que, añada otro, sino que cambio el nombre. en el proceso hijo al cerrar le añado un time.sleep de un 1 segundo para que le de tiempo al hijo a unir el proceso hijo al proceso padre. En el ultimo finally. Código
Muchas gracias por vuestra atención y tiempo :D Título: Re: ¿Como coger el PID de un proceso hijo que ha hecho Event.set()? | Python3 multiprocessing Event Publicado por: Danielㅤ en 6 Diciembre 2021, 20:10 pm Hola compañero Drakaris, nos alegramos porque has solucionado tu problema y te agradecemos por dejar los pasos de la solución, que le puede servir a otros usuarios con el mismo o similar problema.
Saludos |