Вопрос

На Linux/НПТЛ, потоки создаются как некий процесс.

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

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

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

/я сейчас исследую источник HAL

Спасибо

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top