¿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.