Pregunta

Estoy trabajando con un programa multihilo (usando pthreads) que actualmente crea un hilo de fondo (PTHREAD_DETACHED) y luego invoca pthread_exit (0). Mi problema es que el proceso se lista como " difunto " y curiosamente no parece que "realmente existe" en / proc (que derrota mis estrategias de depuración)

Me gustaría que se cumplan los siguientes requisitos:

  • el programa debe ejecutar la función A en un bucle y la función B una vez
  • dado el PID del programa / proc / $ pid / exe, / proc / $ pid / maps y / proc / $ pid / fd deben estar accesibles (cuando el proceso está inactivo, todos son enlaces vacíos o no válidos)
  • debe ser posible suspender / interrumpir el programa con CTRL + C y CTRL + Z como de costumbre

edit: dudo en cambiar la interfaz del programa para tener una A en la " main " hilo y B en un hilo generado (actualmente están en la otra dirección). ¿Resolvería el problema?

¿Fue útil?

Solución

Puede suspender la ejecución del proceso principal en espera de una señal, o no desconectar el hilo (usando el valor predeterminado PHTREAD_CRATE_JOINABLE ) esperando su finalización con un pthread_join () .

Otros consejos

¿Existe alguna razón por la que no pueda hacer las cosas al revés: hacer que el hilo principal ejecute el bucle y hacer la tarea única en el hilo de fondo?

No es el diseño más elegante, pero quizás puedas bloquear el hilo principal antes de salir con:

 while(1) {
       pause();
 }

Luego puede instalar un controlador de señal para SIGINT y SIGTERM que rompe el ciclo. La forma más fácil de hacerlo es: salir (0) :-).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top