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?

È stato utile?

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) :-).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top