Установка потока /proc/PID/cmdline?

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

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

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

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

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

Спасибо

3 ответа

Решение

Если вы хотите сделать это переносимым способом, который будет работать в разных вариациях 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] и показать этот результат.

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

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

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

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

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

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

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

Другие вопросы по тегам