É possível consultar as informações do processo diretamente do kernel do Linux?

4

Eu sei pgrep , top e ps all query /proc filesystems. Por enquanto, tudo bem. No entanto, o que me fez pensar é que, no passado, não havia nenhum sistema de arquivos /proc . Mesmo hoje em dia, o Mac OS X, até onde eu sei, não tem /proc filesystem, mas top ainda acessa informações do processo, o que me sugere que tal informação deve vir diretamente do kernel. Minha pergunta, no entanto, é específica do Linux. Quais bibliotecas e / ou syscalls podem ser usadas para consultar informações de processo diretamente, ignorando /proc ?

    
por Sergiy Kolodyazhnyy 28.01.2017 / 19:53

2 respostas

4

É 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).

    
por 29.01.2017 / 01:16
3

Antes do advento do sistema de arquivos / proc, o psutils lia as informações diretamente via / dev / kmem, o pseudo-dispositivo de memória do kernel. Obviamente, apenas certas versões do ps trabalhavam com qualquer versão do kernel, o que era um argumento em favor do / proc. (Ser legível e facilitar o acesso às estruturas do kernel para coisas como scripts perl são, indiscutivelmente, maiores benefícios.)

    
por 28.01.2017 / 20:52