es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

pausar un proceso hijo y reanudarlo desde el proceso padre

No tengo casi ninguna idea de cómo funcionan las señales, aparte de la teoría. Estoy escribiendo un programa que necesita que el proceso hijo comience, se pause, espere a que el proceso padre envíe una señal, luego el proceso padre hace su tarea ejecutando su parte del código, envía una señal, espera a que el hijo termine, luego el hijo reanuda y continúa más allá de la pausa(); y termina para que el padre pueda continuar y finalizar también.
He intentado hacer kill(c_pid, SIGCONT), pero el programa simplemente se cuelga porque el proceso hijo nunca se reanuda y el padre está esperando a que el hijo termine.
¿Necesito poner una función void que haga algo para verificar la señal, escribir algo antes de la pausa();?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Sí, para que el proceso secundario reciba la señal y reanude su ejecución después de la llamada a pause(), es necesario configurar una función manejadora de señales para manejar la señal enviada por el proceso padre. Puedes utilizar la función signal() para registrar la función manejadora de señales para la señal que deseas manejar (por ejemplo, SIGCONT).

    En la función manejadora de señales, puedes utilizar una variable global u otro mecanismo para indicar al proceso secundario que la señal ha sido recibida, de modo que pueda reanudar su ejecución. Por ejemplo, podrías establecer una variable de bandera como verdadera en la función manejadora de señales, y hacer que el proceso secundario verifique el valor de esa bandera antes de llamar a pause().

    Alternativamente, puedes utilizar una de las otras funciones de llamada al sistema que permiten a un proceso esperar una señal (por ejemplo, sigsuspend()), en lugar de utilizar pause(). Esto puede darte más control sobre cuándo y cómo se maneja la señal.

    En general, el manejo de señales puede ser complicado y requiere atención cuidadosa a los detalles para evitar problemas como condiciones de carrera y bloqueos. Puede ser útil consultar con un desarrollador más experimentado o revisar recursos como el estándar POSIX para señales.

Comments are closed.