Por que 'ps -e | menos 'mostrar' menos 'entre os processos? [duplicado]

4

Eu corro ps -ejH | less . A saída inclui ps e less também.

Qual é o motivo? Eu pensei que funcionaria da seguinte forma:

  1. Primeiro, ps será executado e listará todos os processos existentes naquele momento.
  2. Em seguida, a saída de ps será alimentada em less .

Mas, de acordo com essa lógica, nem ps não less deve aparecer na saída de ps .

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

    
por Utku 25.06.2016 / 14:24

3 respostas

11

O shell inicia ambos, para estabelecer as extremidades do pipe, assim ps se vê assim como o processo na outra extremidade do pipe.

    
por 25.06.2016 / 14:25
1

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

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

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

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

À medida que o ps trabalha na lista de processos, ele encontra e exibe a si mesmo e menos, 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 tanto ps quanto menos.

    
por 25.06.2016 / 18:19
-1

Use

ps -ef | grep [l]ess

para evitar menos.

  • [l]ess match less como regexp, mas não como string fixa.
por 25.06.2016 / 17:59

Tags