Por que `ps -e | less` mostra 'menos' entre processos?

Por que `ps -e | less` mostra 'menos' entre processos?

Eu corro ps -ejH | less. A saída inclui pse lesstambém.

Qual é a razão? Achei que funcionaria da seguinte maneira:

  1. Primeiro, psserá executado e listará todos os processos existentes naquele momento.
  2. Então, a saída de psserá inserida em less.

Mas de acordo com essa lógica, nem psnot lessdeveria aparecer na saída de ps.

Então, por que esses processos estão incluídos na saída de ps? Funciona psum pouco diferente do que descrevi?

Responder1

Oconchainicia ambos, para estabelecer as extremidades do tubo, assim psvê a si mesmo e também o processo na outra extremidade do tubo.

Responder2

"Mas de acordo com essa lógica, nem ps nem less deveriam aparecer na saída de ps."

Sim, então sua lógica está errada, porque ambos aparecem. Quando você executa um comando em um shell Un*x, muito poucos (se houver) realmente são executados no shell. Um processo separado é bifurcado para executar esse comando.

Quando você canaliza dois comandos juntos, ambos os comandos são iniciados em processos separados e o stdout do primeiro é vinculado ao stdin do segundo.

Portanto, logo após executar ps|less, você terá três processos: um executando seu shell, um executando ps e um executando less. Como a saída é gerada por ps, ela será trabalhada em paralelo (dividida conforme necessário) por menos. Ambos os comandos são executados em paralelo, não sequencialmente, com buffer mínimo.

À medida que ps percorre a lista de processos, ele encontra e exibe a si mesmo e less, e o shell pai também, e o pai do pai, e assim por diante, até o init. E tudo mais no sistema. É por isso que sua saída inclui ps e less.

Responder3

Usar

ps -ef | grep [l]ess

para evitar menos.

  • [l]esscorresponda lesscomo regexp, mas não como string fixa.

informação relacionada