Tengo 1 práctica de ingeniería informática que me trae de cabeza. No llego a mandar señales con kill
La practica que te pongo a continuación me trae de cabez, conseguí formar los hijos como dios manda, pero mi problema llega al querer mandar las señales con kill(pid, SIGUSR1). No se si debo igualar esta llamada a un valor para comprobar si se envía bien, ademas para poner los pids primero los guarde en una matriz global, pero no se almacenan y por lo tanto no da vueltas... De esta dejo la carrera, ¿podrías echarme un mano por favor?
Gracias
Las practicas las realizo tanto en C como en unix.
En esta práctica, los procesos formarán un corro. Irán transmitiendo la señal SIGUSR1 alrededor del corro. Cuando la señal haya dado siete vueltas, los procesos morirán.
La práctica constará de un único ficheros fuente y su correspondiente makefile. El nombre del fichero fuente será ring. C y del fichero ejecutable que se produzca a partir de él será ring. El programa admitirá un único argumento que será el número de procesos que forman el corro. Si se le invoca sin ningún argumento, el programa imprimirá una línea indicando su forma correcta de uso.
El proceso original tendrá un único hijo. Dicho hijo tendrá otro hijo sólo, que a su vez tendrá otro, y así hasta que la familia tenga tantos miembros como esté especificado en la línea de órdenes.
Una vez creados todos los hijos, el hijo más joven manda la señal SIGUSR1 al primer proceso. Cuando este proceso reciba la señal, la transmitirá a su hijo, el cual la transmitirá al suyo, y así sucesivamente hasta que la señal retorne al hijo más joven. El hijo más joven imprimirá por la pantalla "Vuelta número 1 completada.". En ese momento, el hijo más joven volverá a mandar la señal SIGUSR1, para volverla a recibir más tarde e informar de que se ha completado la segunda vuelta. En total, debe hacer esto siete veces. Después de cada una de las tres primeras vueltas, el proceso más joven debe dormir un segundo (usad sleep para ello) antes de mandar la señal al proceso más viejo de nuevo. En el resto de vueltas, no dormirá nada.
Cuando el hijo menor acabe con las siete vueltas, morirá y devolverá un código de retorno unidad a su padre.
Cuando cualquier proceso detecte que su hijo ha muerto, tomará su código de retorno, le sumará uno y devolverá el resultado de la suma a su padre al morir.
Cuando el padre de todos los procesos detecte que su hijo ha muerto, tomará su código de retorno. Si el código de retorno obtenido más uno coincide con el número de procesos totales, imprimirá por pantalla:
Ejecución satisfactoria.
Si no es así, imprimirá: "Fracaso
Gracias
Las practicas las realizo tanto en C como en unix.
En esta práctica, los procesos formarán un corro. Irán transmitiendo la señal SIGUSR1 alrededor del corro. Cuando la señal haya dado siete vueltas, los procesos morirán.
La práctica constará de un único ficheros fuente y su correspondiente makefile. El nombre del fichero fuente será ring. C y del fichero ejecutable que se produzca a partir de él será ring. El programa admitirá un único argumento que será el número de procesos que forman el corro. Si se le invoca sin ningún argumento, el programa imprimirá una línea indicando su forma correcta de uso.
El proceso original tendrá un único hijo. Dicho hijo tendrá otro hijo sólo, que a su vez tendrá otro, y así hasta que la familia tenga tantos miembros como esté especificado en la línea de órdenes.
Una vez creados todos los hijos, el hijo más joven manda la señal SIGUSR1 al primer proceso. Cuando este proceso reciba la señal, la transmitirá a su hijo, el cual la transmitirá al suyo, y así sucesivamente hasta que la señal retorne al hijo más joven. El hijo más joven imprimirá por la pantalla "Vuelta número 1 completada.". En ese momento, el hijo más joven volverá a mandar la señal SIGUSR1, para volverla a recibir más tarde e informar de que se ha completado la segunda vuelta. En total, debe hacer esto siete veces. Después de cada una de las tres primeras vueltas, el proceso más joven debe dormir un segundo (usad sleep para ello) antes de mandar la señal al proceso más viejo de nuevo. En el resto de vueltas, no dormirá nada.
Cuando el hijo menor acabe con las siete vueltas, morirá y devolverá un código de retorno unidad a su padre.
Cuando cualquier proceso detecte que su hijo ha muerto, tomará su código de retorno, le sumará uno y devolverá el resultado de la suma a su padre al morir.
Cuando el padre de todos los procesos detecte que su hijo ha muerto, tomará su código de retorno. Si el código de retorno obtenido más uno coincide con el número de procesos totales, imprimirá por pantalla:
Ejecución satisfactoria.
Si no es así, imprimirá: "Fracaso
3 respuestas
Respuesta de decus
1
Respuesta de hidden
1
Respuesta de zapanjomur
-1