2013-07-07 20 views
6

Czy istnieje sposób dla ps (lub podobnego narzędzia) do wyświetlania nazwy pthread? napisałem następujący prosty program:Nazwa wątku wyświetlania ps

// th_name.c 
#include <stdio.h> 
#include <pthread.h> 

void * f1() { 
    printf("f1 : Starting sleep\n"); 
    sleep(30); 
    printf("f1 : Done sleep\n"); 
} 

int main() { 

    pthread_t f1_thread; 
    pthread_create(&f1_thread, NULL, f1, NULL); 
    pthread_setname_np(f1_thread, "f1_thread"); 

    printf("Main : Starting sleep\n"); 
    sleep(40); 
    printf("Main : Done sleep\n"); 
    return 0; 

} 

istnieje komenda/użyteczność (jak ps), które można używać do wyświetlania tematów do powyższego programu, wraz z podaniem ich nazwy.

$ /tmp/th_name > /dev/null & 
[3] 2055 
$ ps -eLf | egrep "th_name|UID" 
UID  PID PPID LWP C NLWP STIME TTY   TIME CMD 
aal  31088 29342 31088 0 2 10:01 pts/4 00:00:00 /tmp/th_name 
aal  31088 29342 31089 0 2 10:01 pts/4 00:00:00 /tmp/th_name 
aal  31095 29342 31095 0 1 10:01 pts/4 00:00:00 egrep th_name|UID 

Używam mojego programu na Ubuntu 12.10.

Odpowiedz

9

Uwaga man page of pthread_setname_np(), które pokazały, jak uzyskać nazwy nitek:

pthread_setname_np() wewnętrznie pisze do wątku specyficzny łączności plików w katalogu/proc filesystem:/proc/self/zadań/[ tid]/comm. pthread_getname_np() pobiera go z tej samej lokalizacji.

i

Przykład

poniżej Program pokazuje zastosowanie pthread_setname_np() i pthread_getname_np().

następnej sesji powłoki przedstawia przykładowy przebieg programu:

$ ./a.out

Utworzono wątku. Domyślna nazwa to: a.out

Nazwa nici po ustawieniu jest THREADFOO.

^Z #Suspend program

1 + Zatrzymano ./a.out

$ ps H -C a.out -o 'PID TID cmd Comm'

PID TID CMD COMMAND

5990 5990 ./a.out a.out

5990 5991 ./a.out THREADFOO

$ cat/proc/5990/zadania/5990/comm

a.z

$ cat/proc/5990/zadania/5991/comm

THREADFOO

3

Z procps-ng (https://gitlab.com/procps-ng/procps) istnieje opcja wyświetlania -L i -T który wypisze wątki nazwami:

$ ps -eL 
$ ps -eT 

-l długo Format może być stosowany z nich:

ale opcja -f zastąpi nazwę nici z pełnym wierszem poleceń, który jest taki sam dla wszystkich wątków.

0

Pokaż identyfikatory i nazwy wątku procesu z 12345 PID:

ps H -o 'tid comm' 12345