Установка потока /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;
Есть идея получше?
Это работает для разных потоков?