Question

Je travaille avec un programme multi-thread (utilisant pthreads) qui crée actuellement un thread en arrière-plan (PTHREAD_DETACHED), puis appelle pthread_exit (0). Mon problème est que le processus est alors répertorié comme "obsolète". et curieusement, ne semble pas "exister vraiment" dans / proc (qui défait mes stratégies de débogage)

Je souhaite que les conditions suivantes soient remplies:

  • le programme doit exécuter la fonction A dans une boucle et la fonction B une fois
  • étant donné le PID du programme / proc / $ pid / exe, / proc / $ pid / maps et / proc / $ pid / fd doivent être accessibles (lorsque le processus est désactivé, ce sont tous des liens vides ou non valides)
  • il doit être possible de suspendre / interrompre le programme avec CTRL + C et CTRL + Z comme d'habitude

edit: J'hésite à changer l'interface du programme pour que A soit dans le menu "main". thread et B dans un thread engendré (ils sont actuellement dans l'autre sens). Cela résoudrait-il le problème?

Était-ce utile?

La solution

Vous pouvez suspendre l'exécution du processus principal en attente d'un signal ou ne pas détacher le fil (en utilisant la valeur par défaut PHTREAD_CRATE_JOINABLE ) en attendant sa fin avec un pthread_join (). .

Autres conseils

Y a-t-il une raison pour laquelle vous ne pouvez pas faire les choses dans l'autre sens: laisser le thread principal exécuter la boucle et effectuer la tâche ponctuelle dans le thread d'arrière-plan?

Ce n'est pas le design le plus élégant, mais vous pourriez peut-être bloquer le thread principal avant de quitter avec:

 while(1) {
       pause();
 }

Ensuite, vous pouvez installer un gestionnaire de signal pour SIGINT et SIGTERM qui rompt la boucle. Le moyen le plus simple est: exit (0): -).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top