[FUG-BR] O comando `ps` requer o procfs?
Patrick Tracanelli
eksffa em freebsdbrasil.com.br
Quarta Fevereiro 14 18:34:35 BRST 2007
Rafael Stockler escreveu:
> Olá a todos,
>
> Sou novato no freeBSD, acabei de instalar. Digamos que esta foi a
> quinta tentativa, nas primeiras ou o pacote do cd falhava na hora de
> instalar ou outra coisa acontecia. Mas consegui instalar tranquilo
> agora.
>
> Porém, quando tento executar o comando ps -ef | grep alguma coisa ou
> só o ps retorna essa mensagem:
>
> ps: Process environment requires procfs(5)
>
> Pq isso ocorre?
Rafael, para usar o argumento -e do ps precisa sim do /proc disponivel.
Monte-o com mount_procfs se quiser. Porem, o uso do procfs em sistemas
BSD é muito raro. Digamos que você encontrou um dos poucos momentos em
que se faz imperativo ter o /proc (o que é bom pra alguem que acabou de
instalar né? hehe). O comando `w' é outro que também requer o /proc para
permitir uso de todas suas funções.
Porque isso ocorre? Ai você tem que se apegar a escolhas de
implementação baseados nas caracterísitcas internas do kernel BSD e de
decisões dos desenvolvedores.
Imagine que algumas aplicacoes podem querer ler informações que
tecnicamente não permitem a elas. Por exemplo, variáveis de ambiente
(caso do -e) internamente são completamente isoladas ao "space" dos
processos em execussão. Apenas processos super privilegiados podem ler o
"space" de outros processos (quando o kernel o permite ainda) entao o
ambiente para ser lido por outro processo ou ate mesmo outro usuario
precisaria que a aplicacao (ps) fosse executada sempre com privilegios
(suid bit da vida) ou fizesse uso de uma syscall so pra acessar o
ambiente. Entao, qual a escolha? Nennhuma dessas, pra isso essas
informacoes podem ser lidas do /proc, um espaco virtual disponível via
sistema de arquivos que possibilita que algumas informações pouco
privilegiadas sejam acessadas por outros processos/uid's.
A execao que nao conta é caso o processo que vai dar "dump" ou ler dados
desse enviroment seja processo filho, pois estes sempre herdam o
ambiente dos processos pai (a nao ser que o ambiente seja limpo antes).
Resumindo, sem o /proc a unica forma de um "ze ninguem" saber o
enviroment de outro "ze ruela" ou do root seria via syscall ou processo
privilegiado. Entao, melhor usar o /proc.
Segundo alguns desenvolvedores (como o PHK) o /proc so existe ate hoje
porque é uma herança maldita hehehe. Maldita o sentido de ser uma
"abordagem feia, mas funcional" e "algumas melhores serem possíveis" mas
que "ninguém melhora porque é pouco importante e funciona bem como está".
Enfim, internals legacy.
--
Patrick Tracanelli
FreeBSD Brasil LTDA.
(31) 3281-9633 / 3281-3547
316601 em sip.freebsdbrasil.com.br
http://www.freebsdbrasil.com.br
"Long live Hanin Elias, Kim Deal!"
Mais detalhes sobre a lista de discussão freebsd