Definir o thread/proc/pid/cmdline?
-
02-07-2019 - |
Pergunta
Sobre Linux/Nptl, os threads são criados como algum tipo de processo.
Eu posso ver que parte do meu processo tem um cmdline estranho:
cat /proc/5590/cmdline
hald-addon-storage: polling /dev/scd0 (every 2 sec)
Você tem uma ideia de como eu poderia fazer isso para cada tópico do meu processo? Isso seria muito útil para a depuração.
/eu agora investigando na fonte HAL
obrigado
Solução
Se você quiser fazer isso de maneira portátil, algo que funcionará em várias variações do UNIX, existem muito poucas opções disponíveis.
O que você precisa fazer é que seu processo de chamadas deve ligar para o executivo com o argv [0]
Argumento apontando para o nome que você gostaria de ver na saída do processo e o nome do arquivo apontando para o executável real.
Você pode tentar esse comportamento do shell usando:
exec -a "This is my cute name" bash
Que substituirá o processo Bash atual por um nomeado "This is my cute name"
.
Para fazer isso em C, você pode olhar para o código -fonte de sendmail
ou qualquer outro software que tenha sido portado extensivamente e encontre todas as variações necessárias nos sistemas operacionais para apoiar isso.
Alguns sistemas operacionais têm um setproctitle(3)
API, alguns outros permitem que você substitua o conteúdo de argv [0]
e mostre esse resultado.
Outras dicas
argv
aponta para cordas graváveis. Basta escrever coisas para eles:
#include <string.h>
#include <unistd.h>
int
main(int argc, char** argv)
{
strcpy(argv[0], "Hello, world!");
sleep(10);
return 0;
}
Bah .. O código não é tão bom, o truque é reutilizar o ponteiro Environ (aqui argv_buffer):
memset (argv_buffer[0] + len, 0, argv_size - len);
argv_buffer[1] = NULL;
Alguma ideia melhor?
Isso está funcionando para diferentes tópicos?