¿Qué hace que un pthread desaparezca?
-
02-07-2019 - |
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?
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) :-).