[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