Proč ls
vyžadují pro své provedení samostatný proces?
Znám důvod, proč příkazy jako cd
nelze provést pomocí forkovacího mechanismu, ale existuje nějaké poškození, pokud ls
se provádí bez rozvětvení?
Přijatá odpověď:
Odpověď je víceméně, že ls
je externí spustitelný soubor. Jeho umístění můžete zobrazit spuštěním type -p ls
.
Proč není ls
zabudováno do pláště? Proč by to mělo být? Úkolem shellu není obsáhnout všechny dostupné příkazy, ale poskytnout prostředí schopné je spustit. Některé moderní shelly mají echo
, printf
a jim podobné jako vestavěné prvky, které technicky nefungují musí být vestavěné, ale jsou vytvořeny z důvodů výkonu, když jsou spouštěny opakovaně (především v těsných smyčkách). Bez jejich vestavění by se shell musel rozdělit a spustit nový proces pro každé jejich volání, což by mohlo být extrémně pomalé.
Přinejmenším spuštění ls
, externí spustitelný soubor, vyžaduje spuštění jednoho z řady systémových volání exec. Mohli byste udělejte to bez rozvětvení, ale nahradilo by to primární shell, který používáte. Co se v tomto případě stane, můžete zjistit následujícím způsobem:
exec ls; echo "this never gets printed"
Vzhledem k tomu, že obraz procesu vašeho shellu je nahrazen, aktuální shell po provedení tohoto kroku již není přístupný. Aby mohl shell po spuštění ls pokračovat v běhu, musel by být příkaz zabudován do shellu.
Rozvětvení umožňuje nahrazení procesu, který není vaším primárním shellem, což znamená, že můžete svůj shell spouštět i poté.