[C con Clase] Cerrar IPC's al capturar señal

d1cor cordobadie en gmail.com
Vie Ago 22 02:49:19 CEST 2014




On Wed, 20 Aug 2014 01:25:16 -0300
Facundo Curti <facu.curti en gmail.com> wrote:

> Holas. Como están? Programo para linux, estoy intentando capturar la señal
> sigint con la funcion signal, para que antes de cerrarse libere todos los
> recursos compartidos (un shared memory y un semaforo). No se me ocurre como
> hacerlo.
> 
> El problema está en que a la funcion signal solo le puedo pasar el puntero
> a una funcion "int funcion (int)". Así que por medio de parametros, no
> tengo forma de indicarle a la funcion de cierre el ID de la memoria
> compartida y del semaforo. Quiero evitar hacer globales estas variables.
> 
> ¿Alguna idea de como puedo hacerlo?

Hola Facundo!

En realidad, la terminación abrupta de procesos (SIGKILL) es la que no libera recursos normalmente y obliga al proceso a terminar su ejecución.

SIGINT y SIGTERM son señales de terminación normales, por lo que deberían estar liberando los recursos propios y privados del proceso.

Ahora, los recursos compartidos de IPC (shm, sem, ...) son independientes del proceso que los crea, y son recursos administrados por el sistema operativo.

A simple vista, se me ocurre capturar el valor de retorno del proceso en cuestión, una vez que terminó, y en consecuencia hacer algo con los recursos compartidos desde el propio SO.
Otra sería lanzar el proceso que usa los recursos como fork de otro proceso (padre), y que el padre libere los recursos compartidos por el proceso terminado una vez que espera su terminación.

De todos modos tené cuidado, porque se supone que el proceso que va a liberar los recursos compartidos está compartiendo datos por medio de esos mecanismos de IPC con otros procesos, y si al terminar eliminás todas las estructuras, el resto de los procesos pueden perder información... da para pensarlo un poco más.

Cualquier otra sugerencia es bienvenida!
Slds a todos!

--------------------------------------------------------------
Ing. Diego Cordoba
GNU/Linux Instructor & Consultant
CLA Carrera Linux Argentina
LPI Linux Certified Professional
www.carreralinux.com.ar - www.diegocordoba.tk
--------------------------------------------------------------




Más información sobre la lista de distribución Cconclase