Linux API pour la liste des processus en cours d'exécution?
J'ai besoin d'une API C/C++ qui me permet de lister les processus en cours d'exécution sur un système Linux, et de lister les fichiers de chaque processus a ouvert.
Je ne pas envie de finir la lecture de l' /proc/système de fichiers directement.
Quelqu'un peut penser à une façon de le faire?
- L'utilitaire de lsof ne que. Il est open-source, lire le code et de voir comment il fonctionne (il doit faire usage de /proc, tout de même)
Vous devez vous connecter pour publier un commentaire.
http://procps.sourceforge.net/
http://procps.cvs.sourceforge.net/viewvc/procps/procps/proc/readproc.c?view=markup
Est la source de ps et d'autres outils. Ils ne sont en effet utiliser proc (indiquant qu'il est probablement le classique et le meilleur). Leur source est tout à fait lisible. Le fichier
Peut être utile. Aussi une suggestion utile en tant que posté par ephemient est un lien vers l'API fournie par libproc, qui devrait être disponible dans votre repo (ou déjà installé, je dirais), mais vous aurez besoin d' "-dev" variation des en-têtes et ce-pas.
Bonne Chance
libproc.a
, qui (par exemple) les paquets Debian en packages.debian.org/libproc-devSi vous ne voulez pas lire à partir de " /proc. Alors vous pouvez envisager l'écriture d'un module du Noyau qui va mettre en place votre propre système d'appel. Et votre appel système doit être écrit afin qu'il puisse obtenir la liste des processus en cours, tels que:
Le code ci-dessus est tirée de mon article ici à http://linuxgazette.net/133/saha.html.Une fois que vous avez votre propre système d'appel, vous pouvez appeler à partir de votre espace utilisateur du programme.
Si vous ne le faites pas, alors je suppose que quelle que soit l'API que vous utilisez en fin de lecture, le système de fichiers /proc. Voici quelques exemples de cela:
Mais malheureusement, cela ne constitue pas une API.
Ici, vous allez (C/C++):
Vous pourriez avoir trouvé ici:
http://ubuntuforums.org/showthread.php?t=657097
Essentiellement, ce qu'il fait est en boucle numérique tous les dossiers dans /proc/, et puis il fait un readlink sur /proc//exe, ou si vous souhaitez que la ligne de commande arguments cat /proc/cmdline
C'est, par la manière, le même que
readproc.c
n' (ou au moins n').Bien sûr, j'espère qu'ils n'ont sans débordement de la mémoire tampon possiblité.
strstr_Wrapper()
.return (strstr(haystack, needle) != NULL)
probablement mieux.chrarry_NameOfProcess[300]
. Ce code n'est pas si bon.fscanf()
de façon à éviter les dépassements de la mémoire tampon et la troncature.PS et tous les autres outils(SAUF pour les Modules du Noyau) lire à partir de
/proc
./proc
est un système de fichiers spéciaux créés à la volée par le noyau, de sorte que les processus en mode utilisateur peut lire des données qui, autrement, ne sera disponible que pour le noyau.Il est recommandé par conséquent, la lecture de
/proc
.Vous pouvez rapidement intuitivement regarder la
/proc
système de fichiers pour voir comment son structurée.Pour chaque processus il y a un
/proc/pid
où pid est le numéro d'id de processus. À l'intérieur de ce dossier il y a plusieurs fichiers qui incluent différentes données concernant le processus en cours.Si vous exécutez
vous permettra de voir comment le programme
ps
le lit des données à partir de/proc
.La seule façon de le faire sans la lecture de /proc serait d'appeler le "ps aux", aller à travers chaque ligne, lisez la deuxième colonne (PID) et l'appel de lsof -p [PID] avec elle.
...Je vous suggère la lecture de /proc 😉
ps
lit /proc, donc ce n'est pas de répondre à la injustifiée contrainte de la question, pas plus que les autres réponses.Il y a une bibliothèque
libprocps
de laprocps-ng
projet. Sur Ubuntu 13.04, si vous nestrace ps
, alors vous pouvez voir queps
utiliselibprocps
./proc/###/*
données, sans avoir à vous de trouver comment lire les champs disponibles.Lecture proc n'est pas trop mauvais. Je ne peux pas vous montrer en C++, mais la suite de D code devrait vous diriger dans la bonne direction:
Moyen facile de le pid d'un processus par nom