Estou tentando executar algum código de inicialização em todos os processos por meio do vinculador dinâmico.
O código deve fazer coisas com base no argumento zero do processo. Estou recebendo os argumentos de /proc/self/cmdline
(se você souber de uma maneira melhor de acessá-los fora do main, informe), mas isso tem um problema:
Os scripts obtêm seu shebang (sem o #!
) como argumento zero e, nesse caso, estou interessado no próximo argumento. Mas como diferenciar os processos interpretados dos nativos?
Responder1
Os detalhes dos quais você está extraindo /proc/self/status
são encontrados em /proc/self/comm
(sem script).
Para a pergunta pretendida: determinar quais processos sãointerpretadoe quais sãonativo, você não pode fazer isso sem saber quais processos devem serintérpretes. Afinal, qualquer processo pode renomear-se através de uma exec
chamada, usando o que quiser na lista de argumentos do processo resultante. Você poderiaadivinharcomparando /proc/self/exe
(que aponta para o executável) com a lista de argumentos, mas isso seria apenas uma suposição, já que há exemplos em que um não-intérprete renomeia seus descendentes apenas para tornar seu uso mais aparente.
Leitura adicional:
Responder2
Parece que os processos Name
entram
</proc/self/status |grep '^Name'
e o nome parece ser o basename
do argumento zero real.
(Vou manter a pergunta aqui caso alguém dê uma resposta melhor).