Utiliser pthreads s'il y a un moyen "intelligent" d'obtenir tous les threadID
créés en utilisant pthread_created
dans un processus, en supposant que ces threads sont créés dans la bibliothèque tierce qui n'expose pas ces données.Obtenir tous les thread_id créés avec pthread_created dans un processus
Répondre
Une façon de le faire est de créer une fonction de remplacement pour pthread_create et d'utiliser LD_PRELOAD. Bien sûr, vous ne voulez pas réimplémentez pthread_create, donc vous devez pthread_create en quelque sorte, mais vous pouvez demander au chargeur dynamique pour le charger pour vous:
#define _GNU_SOURCE
#include <stdio.h>
#include <stdint.h>
#include <bits/pthreadtypes.h>
#include <dlfcn.h>
void store_id(pthread_t * id) {
fprintf(stderr, "new thread created with id 0x%lx\n", (*id));
}
#undef pthread_create
int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * (*start)(void *), void * arg)
{
int rc;
static int (*real_create)(pthread_t * , pthread_attr_t *, void * (*start)(void *), void *) = NULL;
if (!real_create)
real_create = dlsym(RTLD_NEXT, "pthread_create");
rc = real_create(thread, attr, start, arg);
if(!rc) {
store_id(thread);
}
return rc;
}
Ensuite, vous compilez à une bibliothèque partagée:
gcc -shared -ldl -fPIC pthread_interpose.c -o libmypthread.so
Et vous pouvez l'utiliser avec un prog lié dynamiquement:
LD_PRELOAD=/path/to/libmypthread.so someprog
note: Ceci est une version adpated de cette blog post
Il n'existe aucun moyen standard dans l'API pthreads pour récupérer la liste des threads. Ce que vous pouvez faire est de plonger dans le code source de "ps" ou "top" et voir comment c'est fait. Vous pouvez trouver le code source dans le procps library.
Lire la liste des dossiers dans/proc/[votre-processus pid]/tâche
Ceci est un répertoire qui contient un sous-répertoire pour chaque thread dans le processus.
- 1. Arrêter un AppDomain et tous les AppDomains qu'il a créés
- 2. Comment implémenter la méthode alarm() correctement pour tuer tous les processus de travail créés par fork()?
- 3. Java: Obtenir un processus avec un pid
- 4. Fermeture de tous les fichiers ouverts dans un processus
- 5. Obtenir tous les liens mailto avec jQuery
- 6. Est-ce que détruire GtkBuilder détruit tous les widgets créés?
- 7. Limiter le nombre de processus créés
- 8. je ne suis pas avec coredump tous les processus
- 9. Wrap tous créés li-elments après un clic
- 10. Les processus fils créés avec fork() sont-ils automatiquement supprimés lorsque le parent est tué?
- 11. Tuer tous les processus générés par un formulaire en C#
- 12. Comment tuer tous les processus asynchrones
- 13. Tous les processus utilisent la bibliothèque partagée
- 14. Le processus parent n'attrape pas tous ses processus enfants
- 15. obtenir tous les marqueurs dans un rayon donné sql
- 16. Obtenir tous les types dérivés dans SchemaSet
- 17. Les processus enfants créés avec le module de multiprocesseur python ne s'impriment pas
- 18. Comment faire pour obtenir une liste de tous les processus de fichiers dans WinXP tiennent?
- 19. Obtenir tous les utilisateurs dans un groupe Active Directory
- 20. Obtenir une liste de tous les fichiers dans un répertoire
- 21. Obtenir la liste de tous les champs dans un projet
- 22. Comment puis-je obtenir tous les dossiers dans un lecteur?
- 23. Élimination des AddIn créés avec MAF (System.AddIn)
- 24. jqGrid obtenir tous les ids
- 25. Comment obtenir tous les CActiveRecords dans yii
- 26. Savoir quand tous les processus dans (vide) est fait?
- 27. Hudson annuler ne pas annuler tous les processus
- 28. MonoRail - Obtenir tous les contrôleurs
- 29. Sharepoint: SQL pour trouver tous les documents créés/édités par un utilisateur
- 30. comment puis-je obtenir l'ensemble des poignées ouvertes pour tous les processus