¿Por qué `ps -e | less`¿mostrar 'menos' entre procesos?

¿Por qué `ps -e | less`¿mostrar 'menos' entre procesos?

Corro ps -ejH | less. La salida incluye psy lesstambién.

¿Cuál es la razón? Pensé que funcionaría de la siguiente manera:

  1. Primero, psse ejecutará y enumerará todos los procesos existentes en ese momento.
  2. Luego, la salida de psse introducirá en less.

Pero según esta lógica, ninguno de los psdos lessdebería aparecer en la salida de ps.

Entonces, ¿por qué se incluyen estos procesos en el resultado de ps? ¿Funciona psun poco diferente a lo que he descrito?

Respuesta1

Elcaparazóncomienza ambos, para establecer los extremos de la tubería, de modo que psse ve a sí mismo y al proceso en el otro extremo de la tubería.

Respuesta2

"Pero según esta lógica, ni ps ni menos deberían aparecer en la salida de ps".

Sí, entonces tu lógica es errónea, porque ambos aparecen. Cuando ejecuta un comando en un shell Un*x, muy pocos (si es que hay alguno) se ejecutan en el shell. Se bifurca un proceso separado para ejecutar ese comando.

Cuando canaliza dos comandos juntos, ambos comandos se inician en procesos separados y la salida estándar del primero se vincula a la entrada estándar del segundo.

Entonces, muy poco después de ejecutar ps|less, tiene tres procesos: uno ejecutando su shell, otro ejecutando ps y otro ejecutando less. Como la salida es generada por ps, menos se trabajará en ella en paralelo (dividida según sea necesario). Ambos comandos se ejecutan en paralelo, no secuencialmente, con un almacenamiento en búfer mínimo.

A medida que ps recorre la lista de procesos, busca y muestra tanto a sí mismo como a less, y también el shell principal, y el padre del padre, y así sucesivamente hasta init. Y todo lo demás en el sistema. Es por eso que su salida incluye ps y less.

Respuesta3

Usar

ps -ef | grep [l]ess

para evitar menos.

  • [l]esscoincide lesscomo expresión regular pero no como cadena fija.

información relacionada