Frage

Ein Linux / NPTL , sind Fäden als eine Art Prozess erstellt.

Ich kann einige meiner Prozess sehen eine seltsame cmdline:

cat /proc/5590/cmdline 
hald-addon-storage: polling /dev/scd0 (every 2 sec)

Haben Sie eine Idee, wie ich, dass für jeden Thread meines Verfahrens tun könnte? Das wäre für die Fehlersuche sehr hilfreich sein.

/ me untersucht nun in HAL Quelle

Dank

War es hilfreich?

Lösung

Wenn Sie dies in einem tragbaren Weise tun wollen, etwas, das über mehrere Unix-Varianten funktionieren, gibt es nur sehr wenige Optionen zur Verfügung.

Was müssen Sie tun, ist, dass Ihre Anrufer Prozess exec mit der argv [0] Argument zeigt auf den Namen nennen muss, die Sie in den Prozess-Ausgang sehen möchten, und der Dateiname der tatsächlichen ausführbaren zeigen.

Sie können dieses Verhalten aus der Shell versuchen, mithilfe:

exec -a "This is my cute name" bash

Das wird den aktuellen bash Prozess mit einem Namen "This is my cute name" ersetzen.

Für tun dies in C, Sie auf den Quellcode von sendmail oder einem anderen Stück Software suchen kann, die ausgiebig portiert wurde und alle Variationen finden, die für alle Betriebssysteme benötigt werden, um dies zu unterstützen.

Einige Betriebssysteme haben eine setproctitle(3) API erlauben einige andere Sie die Inhalte von argv [0] außer Kraft zu setzen und dieses Ergebnis zeigen.

Andere Tipps

argv Punkte Strings beschreibbar. Schreiben Sie einfach Sachen zu ihnen:

#include <string.h>
#include <unistd.h>

int
main(int argc, char** argv)
{
    strcpy(argv[0], "Hello, world!");
    sleep(10);
    return 0;
}

Bah .. der Code nicht so schön ist, ist der Trick, um die environ wiederzuverwenden (hier argv_buffer) Zeiger:

memset (argv_buffer[0] + len, 0, argv_size - len);
argv_buffer[1] = NULL;

Gibt es eine bessere Idee?

Ist das Arbeiten für verschiedene Threads?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top