ps ordem de execução de saída / pipeline

0

Eu corro ps aux | grep somethinghere .

A saída mostra o grep somethinghere como um processo em execução.

A minha pergunta é: não deve ps aux terminar primeiro e, em seguida, grep somethinghere executar a sua saída? Talvez não haja necessidade de ps terminar (há um canal entre eles), mas deve ser executado como o primeiro processo, enquanto grep não está sendo executado.

A saída significa que grep foi executado antes de ps !

Como isso é? Não deve ps ser executado primeiro, porque sua saída deve ser canalizada para grep ? Mesmo que eles sejam executados ao mesmo tempo, por que eu sempre vejo grep na saída? Eu não deveria ver grep às vezes também?

    
por vfsoraki 30.01.2015 / 19:02

2 respostas

1

Você deve analisar esta página .

Edite, agora que entendi o que você está perguntando:


Talvez isso ajude a explicar melhor.

The order the commands are run actually doesn't matter and isn't guaranteed. Leaving aside the arcane details of pipe(), fork(), dup() and execve(), the shell first creates the pipe, the conduit for the data that will flow between the processes, and then creates the processes with the ends of the pipe connected to them. The first process that is run may block waiting for input from the second process, or block waiting for the second process to start reading data from the pipe. These waits can be arbitrarily long and don't matter. Whichever order the processes are run, the data eventually gets transferred and everything works.

    
por 30.01.2015 / 19:11
0

Suponho que OP significa "Como remover grep somethinghere process de ps lista de saída de somethinghere prosesses". Há uma dúzia de maneiras de fazer isso:

  1. Se você precisar apenas de um número, poderá usar pgrep -l somethinghere
  2. Double grep ps aux | grep somethinghere | grep -v grep (já conhecemos, mas eu não gosto disso)
  3. Faça um pouco de regexp com somethinghere ps aux | grep [s]omethinghere
por 30.01.2015 / 19:22

Tags