GNU/Linux >> Znalost Linux >  >> Linux

Proč „ls“ vyžaduje samostatný proces pro provedení?

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


Linux
  1. Proč Bashrc kontroluje, zda je aktuální shell interaktivní?

  2. Proč přihlašovací shell „sudo -i“ poruší argument řetězce příkazu Here-doc?

  3. Co znamená 'cd -'?

  1. Proč popen() vyvolá shell k provedení procesu?

  2. Proč rsync nepoužívá delta-transfer pro místní soubory?

  3. Proč 'dd' nefunguje pro vytvoření bootovatelného USB?

  1. Proč se Ctrl + V nevloží do Bash (Linux shell)?

  2. Proč je SUID zakázáno pro skripty prostředí, ale ne pro binární soubory?

  3. Proč uživatel 'bin' potřebuje přihlašovací shell?