2013-07-07 47 views
6

Có cách nào để ps (hoặc công cụ tương tự) hiển thị tên của người đọc không? tôi đã viết các chương trình đơn giản sau đây:Tên hiển thị ps hiển thị

// 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; 

} 

Có một câu lệnh/tiện ích (như ps) mà tôi có thể sử dụng để hiển thị các chủ đề cho chương trình trên, cùng với tên của họ.

$ /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 

Tôi đang chạy chương trình của mình trên Ubuntu 12.10.

Trả lời

9

lưu ý các man page of pthread_setname_np(), đã cho thấy làm thế nào để có được tên của chủ đề:

pthread_setname_np() trong nội bộ ghi vào thread comm cụ tập tin dưới/proc filesystem:/proc/self/nhiệm vụ/[ tid]/comm. pthread_getname_np() truy xuất nó từ cùng một vị trí.

Ví dụ

Chương trình dưới đây giải thích việc sử dụng pthread_setname_np() và pthread_getname_np().

Phiên vỏ sau đây cho thấy một mẫu chạy của chương trình:

$ ./a.out

Tạo một sợi. Tên mặc định là: a.out

Tên chủ đề sau khi đặt là THREADFOO.

^Z #Suspend chương trình

1 + Stopped ./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/nhiệm vụ/5990/comm

a.ra

$ cat/proc/5990/nhiệm vụ/5991/comm

THREADFOO

3

Với procps-ng (https://gitlab.com/procps-ng/procps) có đầu ra tùy chọn -L-T mà sẽ in đề tên:

$ ps -eL 
$ ps -eT 

-l định dạng dài có thể được sử dụng với chúng:

$ ps -eLl 
$ ps -eTl 

nhưng tùy chọn sẽ thay thế tên luồng bằng dòng lệnh đầy đủ giống nhau cho tất cả các chuỗi.

0

Hiện các ID chủ đề và tên của quá trình với PID 12345:

ps H -o 'tid comm' 12345 
Các vấn đề liên quan