Настройка потока /proc/PID/cmdline?
-
02-07-2019 - |
Вопрос
На 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;
Есть идея получше?
Это работает для разных потоков?