Pergunta

Estou tentando identificar quando um processo específico está em execução, com base em seus argumentos, no Mac OS X. Pode haver vários processos em execução com o mesmo nome, mas apenas um terá os argumentos que estou procurando. Os processos não pertencem ao mesmo usuário que estará executando meu código. Eles não terão modificado seu ARGV de forma alguma.

O comando 'PS' mostra exatamente as informações que eu preciso. Mas eu preferiria muito não ter que gerar 'PS' e analisar sua saída.

Eu tentei originalmente a solução de essa questão, usando o SySCTL, mas acontece que só funciona para processos que você possui; Vejo minha outra pergunta para mais informações.

Então, como o PS obtém informações de argv para processos pertencentes a outros usuários?

Foi útil?

Solução

No Mac OS X PS, é setuid 0, e é assim que obtém as informações para todos os processos. Você precisa ser executado como root para obter essas informações; portanto, precisa ser setuid 0 ou executar seu utilitário com sudo.

A melhor maneira é provavelmente apenas para gerar PS e analisar a saída, mesmo que você realmente não queira;)

Outras dicas

BSD ps (usado no Mac OS X) usa kvm_getargv() Para obter os argumentos de comando para um processo.

Aqui está a chamada real: Código -fonte do PS. Procurar por kvm_getproc2.

Ver Página do OpenBSD Man Para esta família de funções.

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