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

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top