Définition du thread / proc / PID / cmdline?
-
02-07-2019 - |
Question
Sous Linux / NPTL , les threads sont créés en tant que processus.
Je peux voir que certains de mes processus ont une étrange cmdline:
cat /proc/5590/cmdline
hald-addon-storage: polling /dev/scd0 (every 2 sec)
Avez-vous une idée de la façon dont je pourrais le faire pour chaque fil de mon processus? Cela serait très utile pour le débogage.
/ moi enquête actuellement dans une source HAL
merci
La solution
Si vous voulez le faire de manière portable, quelque chose qui fonctionnera sur plusieurs variantes d'Unix, il y a très peu d'options disponibles.
Ce que vous devez faire, c'est que votre processus appelant doit appeler exec avec l'argument argv [0]
pointant vers le nom que vous souhaitez voir dans la sortie du processus et le nom du fichier pointant vers l'exécutable réel.
Vous pouvez essayer ce comportement à partir du shell en utilisant:
exec -a "This is my cute name" bash
Cela remplacera le processus bash actuel par un processus "Ceci est mon joli nom"
.
Pour cela, vous pouvez consulter le code source de sendmail
ou tout autre logiciel largement porté et rechercher toutes les variations nécessaires entre les systèmes d'exploitation pour prendre en charge cette fonctionnalité. .
Certains systèmes d'exploitation ont une API setproctitle (3)
, d'autres vous permettent de remplacer le contenu de argv [0]
et d'afficher ce résultat.
Autres conseils
argv
pointe sur des chaînes accessibles en écriture. Il suffit de leur écrire:
#include <string.h>
#include <unistd.h>
int
main(int argc, char** argv)
{
strcpy(argv[0], "Hello, world!");
sleep(10);
return 0;
}
Bah .. le code n’est pas très agréable, le truc est de réutiliser le pointeur environ (ici argv_buffer):
memset (argv_buffer[0] + len, 0, argv_size - len);
argv_buffer[1] = NULL;
Une meilleure idée?
Est-ce que cela fonctionne pour différents threads?