Cosa rende defunto un pthread?
-
02-07-2019 - |
Domanda
Sto lavorando con un programma multi-thread (usando pthreads) che attualmente crea un thread in background (PTHREAD_DETACHED) e quindi invoca pthread_exit (0). Il mio problema è che il processo viene quindi elencato come " defunct " e curiosamente non sembra "esistere davvero" in / proc (che sconfigge le mie strategie di debug)
Vorrei soddisfare i seguenti requisiti:
- il programma dovrebbe eseguire la funzione A in un ciclo e la funzione B una volta
- dato il PID del programma / proc / $ pid / exe, / proc / $ pid / maps e / proc / $ pid / fd devono essere accessibili (quando il processo è fallito, sono tutti collegamenti vuoti o non validi)
- deve essere possibile sospendere / interrompere il programma con CTRL + C e CTRL + Z come al solito
modifica: esito a cambiare l'interfaccia del programma per avere A in " main " thread e B in un thread generato (sono attualmente nell'altro modo). Risolverà il problema?
Soluzione
Puoi sospendere l'esecuzione del processo principale in attesa di un segnale o non staccare il thread (usando il PHTREAD_CRATE_JOINABLE predefinito in attesa della sua conclusione con un pthread_join ()
.
Altri suggerimenti
C'è un motivo per cui non è possibile fare le cose al contrario: far eseguire il ciclo principale al thread principale e svolgere l'attività una tantum nel thread in background?
Non è il design più elegante ma forse potresti bloccare il thread principale prima di uscire con:
while(1) {
pause();
}
Quindi è possibile installare un gestore di segnale per SIGINT e SIGTERM che interrompe il loop. Il modo più semplice per farlo è: exit (0) :-).