Saída diferente de “ps -a” no Ubuntu e no Fedora

3

Eu notei que o comando ps -a produz saída diferente quando eu o executo no Ubuntu "16.04" e no Fedora 23. De acordo com a página man de ambas as distribuições, a opção -a deve fazer:

-a Select all processes except both session leaders (see getsid(2)) and processes not associated with a terminal.

Este não parece ser o caso do Ubuntu.

Não consigo explicar esse comportamento, pois parece que eles têm a mesma versão de procps.

Fedora:

  • Nome: procps-ng
  • versão: 3.3.10

Ubuntu:

  • Pacote: procps
  • Versão: 2: 3.3.10-4ubuntu2

Você tem alguma idéia do porquê isso está acontecendo? Estou fazendo algo errado?

Obrigado BR,

    
por obo 22.05.2016 / 09:30

2 respostas

0

ps man page

-a Select all processes except both session leaders (see getsid(2)) and processes not associated with a terminal.

Esse comportamento é explicado pelo fato de que há mais processos anexados a um terminal no Fedora em comparação ao Ubuntu.

  1. Ubuntu
  2. Fedora
por 23.05.2016 / 22:47
2

Existem, pelo menos, duas coisas que isso poderia ser. O mais provável é que ps tenha um alias para ps -A (ou ps a ; o a sem o - resulta em comportamento semelhante a -A) no fedora; o que explicaria o formato de saída. Em cada sistema, digite which ps , que revelará quais aliases, se houver, estão sendo chamados em vez do executável diretamente.

Você pode ignorar todos os aliases chamando o caminho completo do programa (por exemplo, /bin/ps ou iniciando o comando com um entrelinha '\', por exemplo, \ps .

A coisa muito menos provável é que as duas distros tenham compilado ps com diferentes flags (resultando em comportamento diferente). Acabei de checar o ps no fedora 23, e a saída padrão é a mesma que você está recebendo do ubunutu, então eu acho que você tem um apelido.

O alias é provavelmente definido no arquivo ~ / .bashrc; embora outros locais sejam possíveis. Você pode ver os aliases em seu ambiente atual digitando alias sem argumentos no terminal.

Atualização:

Como não são alias, outra coisa (para indicar o óbvio) é modificar o comportamento. Aqui estão algumas coisas para olhar para descobrir o que é isso: Em cada sistema, execute-os em um ambiente 'limpo':

env -i ps

e veja se o comportamento muda. Se isso acontecer, então sabemos que é um ambiente que muda isso.

em cada sistema, digite o seguinte comando: ps --info

Veja se o campo personality=0x é diferente de zero, o que pode alterar a saída. Observe quaisquer outras diferenças dessa saída; publique-as se não conseguir decodificar o significado da diferença.

Para ver se algo está refundindo ps , execute o seguinte no bash shell em cada:

set -x
ps -a

Você deve ver algo como:

+ps -a

ecoou; se você ver alguma outra coisa, por exemplo +ps aux , então isso causaria isso. Isso geralmente é feito por um alias, mas pode ser uma função. Você pode desativar o spam baseando-se em set +x

Em cada máquina, verifique se o binário é um link simbólico para outra coisa e se há algo estranho acontecendo (provavelmente no fedora que / usr / bin / ps é um link sym para / bin / ps)

ls -alt /bin/ps
ls -alt /usr/bin/ps

Tente

type ps

Em cada máquina; os resultados devem ser os mesmos, se não responder com os resultados.

Existem algumas variáveis ambientais que podem modificar o comportamento de ps; para ver este tipo man ps ; eles estão no fundo. digite env em cada sistema operacional e veja se algum está definido; você pode grep para eles:

env | grep 'CMD_ENV\|PS_PERSONALITY\|_XPG'

Existem outros; veja a página do manual para adicioná-los à consulta, caso eles não retornem nada ou para descobrir o que a configuração significa para ps .

Entrando nas ervas daninhas aqui, mas se ainda não tiver nada, verifique os cabeçalhos dos arquivos binários em cada um deles:

readelf -h /bin/ps

Se nada disso mostrar diferenças, você pode copiar o arquivo / bin / ps para o outro SO e fazer uma comparação:

cmp -b /bin/ps /path/to/copy/of/ps

Isso produzirá todos os bytes que diferem entre os dois arquivos. Os valores reais não importam; apenas o número de diferenças.

Eles serão diferentes; se é apenas um par de bytes diferença que seria apenas o campo gcc NT_GNU_BUILD_ID, que é único para cada construção, mesmo arquivos idênticos. Se eles não são substancialmente diferentes do que é um comportamento ambientalmente influenciado, e eu não consigo mais pensar em verificar.

    
por 22.05.2016 / 17:00