GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué "ls" requiere un proceso separado para su ejecución?

¿Por qué ls requiere un proceso separado para su ejecución?
Sé por qué comandos como cd no se puede ejecutar mediante un mecanismo de bifurcación, pero ¿hay algún daño si ls se ejecuta sin bifurcar?

Respuesta aceptada:

La respuesta es más o menos que ls es un ejecutable externo. Puedes ver su ubicación ejecutando type -p ls .

¿Por qué no es ls integrado en el caparazón, entonces? Bueno, ¿por qué debería ser? El trabajo de un shell no es abarcar todos los comandos disponibles, sino proporcionar un entorno capaz de ejecutarlos. Algunas conchas modernas tienen echo , printf , y su tipo como componentes integrados, que no técnicamente tienen que ser integrados, pero se hacen así por razones de rendimiento cuando se ejecutan repetidamente (principalmente en bucles estrechos). Sin hacerlos integrados, el shell tendría que bifurcarse y ejecutar un nuevo proceso para cada llamada, lo que podría ser extremadamente lento.

Como mínimo, ejecutar ls , un ejecutable externo, requiere ejecutar una de las llamadas al sistema de la familia exec. podrías haz esto sin bifurcar, pero reemplazaría el caparazón principal que estás usando. Puede ver lo que sucede en esa instancia haciendo lo siguiente:

exec ls; echo "this never gets printed"

Dado que se reemplaza la imagen de proceso de su shell, ya no se puede acceder al shell actual después de hacer esto. Para que el shell pueda continuar ejecutándose después de ejecutar ls, el comando debería estar integrado en el shell.

La bifurcación permite el reemplazo de un proceso que no es su shell principal, lo que significa que puede continuar ejecutando su shell después.


Linux
  1. ¿Por qué la sustitución de comandos de Shell engulle un carácter de nueva línea final?

  2. ¿Por qué la sustitución del proceso Bash no funciona con algunos comandos?

  3. ¿Qué significa 'cd -'?

  4. ¿Por qué bifurcar mi proceso hace que el archivo se lea infinitamente?

  5. ¿Por qué ejecutar un comando de shell de Linux con '&'?

¿Por qué rsync no usa transferencia delta para archivos locales?

¿Por qué 'dd' no funciona para crear un USB de arranque?

¿Por qué Ctrl + V no se pega en Bash (shell de Linux)?

¿Por qué NTP requiere acceso de firewall bidireccional al puerto UDP 123?

¿Por qué SUID está deshabilitado para scripts de shell pero no para binarios?

¿Por qué el usuario 'bin' necesita un shell de inicio de sesión?