Установка потока / proc / PID / cmdline? - PullRequest
3 голосов
/ 26 сентября 2008

В Linux / NPTL потоки создаются как некий процесс.

Я вижу, что у некоторых из моих процессов есть странная команда:

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

У вас есть идея, как я могу сделать это для каждого потока моего процесса? Это было бы очень полезно для отладки.

/ me сейчас расследует в источнике HAL

спасибо

Ответы [ 3 ]

6 голосов
/ 26 сентября 2008

Если вы хотите сделать это портативным способом, который будет работать в нескольких вариациях Unix, вариантов будет очень мало.

Что вам нужно сделать, так это чтобы ваш вызывающий процесс вызвал exec с аргументом argv [0], указывающим на имя, которое вы хотели бы видеть в выводе процесса, и имя файла, указывающее на фактический исполняемый файл.

Вы можете попробовать это поведение из оболочки, используя:

exec -a "This is my cute name" bash

Это заменит текущий процесс bash с именем "This is my cute name".

Чтобы сделать это в C, вы можете взглянуть на исходный код sendmail или любое другое программное обеспечение, которое было перенесено, и найти все варианты, необходимые для разных операционных систем.

Некоторые операционные системы имеют setproctitle(3) API, другие позволяют переопределять содержимое argv [0] и отображать этот результат.

4 голосов
/ 26 сентября 2008

argv указывает на доступные для записи строки. Просто напишите им:

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

int
main(int argc, char** argv)
{
    strcpy(argv[0], "Hello, world!");
    sleep(10);
    return 0;
}
0 голосов
/ 26 сентября 2008

Бах .. код не так хорош, хитрость заключается в том, чтобы повторно использовать указатель окружения (здесь argv_buffer):

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

Есть идея получше?

Это работает для разных потоков?

...