Buenas tardes. Necesito vuestra ayuda para un trabajo urgente. No pido que me lo hagais simplemente necesito ayuda. El trabajo es sobre procesos padres, hijos y testigos. Os dejo el enunciado:
1.Haced un pequeño programa que cree un hijo y deje a padre e hijo en un pause(). Compiladlo, ejecutadlo, comprobadlo con ps -fu y depuradlo, si fuera necesario.
2. El siguiente paso es modificar el programa para que tenga 7 hijos.
3.Si todo va bien, lograd que se tengan tantos hijos como los especificados en una variable.
4. Es el momento de que se creen tantos hijos como se indique en la línea de órdenes.
5. Completad el tratamiento de la línea de órdenes, añadiendo la posibilidad de debug y detectando errores.
6. Ahora empecemos a programar la finalización ordenada. Al pulsar CTRL+C, el padre debe esperar por la muerte de los hijos e imprimir por pantalla su mensaje. Registrará para ello la señal SIGINT.
7. El siguiente paso consiste en hacer circular el testigo. Debéis registrar la señal SIGUSR1 y diseñar un esquema de circulación de la señal. Haced la pausa del modo de depuración. Los procesos pueden imprimir su pid cada vez que reciban el testigo para poder depurar. Uno de los procesos debe comenzar la circulación del testigo.
8.Si no funciona, pensad dónde se está recibiendo la señal y si la solución que planteamos es válida se reciba donde se reciba. Pensad que también puede estar recibiéndose la siguiente señal en la propia manejadora. Si no funciona, una solución es bloquear con sigprocmask SIGUSR1 en la zona conflictiva y desbloquearla cuando no tenga peligro el recibirla (quizá en un sigsuspend).
9. El resto del camino no es más fácil. Debéis programar la entrada y salida de la sección crítica y las pausas correspondientes, registrando la señal SIGALRM. El problema fundamental de esta etapa es que tenéis que poner orden en la posible recepción concurrente de varias señales.
10. Si veis que la cosa se complica, quizá podéis replantear la programación usada a una orientada a sucesos, tal y como vimos en clase...
Los apartados en rojo ya los tengo realizados, me gustaría que me echaseis una mano con el resto de apartados. Si pudieseis ayudarme os lo agradereceria muchisimo.
Un saludo :)