É possível consultar as informações de processo diretamente do kernel do Linux - lendo os arquivos em /proc
. É assim que é feito no Linux, Solaris e várias outras variantes do Unix.
Sistemas Unix antigos tinham um comando ps
que era setuid root e mapeava alguma memória do kernel (por meio de /dev/kmem
ou similar) e analisou as estruturas de dados do kernel. Isso exigiu ps
para ter privilégios (perigosos) e ser amarrado à versão exata do kernel (inconveniente).
Nos sistemas modernos * BSD, ps
funciona chamando o sysctl
função, que por sua vez faz chamadas de sistema para recuperar informações formatadas como estruturas definidas por um formato binário. O MacOS usa o mesmo mecanismo.
O Linux não possui essa interface BSD. Ele usa procfs e sysfs para permitir que o userland recupere informações do kernel. Quando o BSD reúne as informações em um formato binário recuperadas por uma chamada de sistema para fins especiais, o Linux empacota informações como strings recuperadas através do acesso comum a um sistema de arquivos de propósito especial. Seria possível usar o mesmo método que nos antigos sistemas Unix, mas ninguém o faz porque é um método inferior (requer privilégios e requer atualização sempre que as estruturas de dados do kernel mudam).