GNU/Linux >> Znalost Linux >  >> Linux

Co dělá „exec [email protected]“?

"[email protected]" bit se rozšíří na seznam pozičních parametrů (obvykle argumenty příkazového řádku), jednotlivě citované, aby se zabránilo dělení slov a generování názvu souboru ("globbing").

exec nahradí aktuální proces procesem, který je výsledkem provedení jeho argumentu.

Stručně řečeno, exec "[email protected]" spustí příkaz daný parametry příkazového řádku tak, že aktuální proces bude nahrazen jím (pokud exec je schopen příkaz vůbec provést).


Dvě další odpovědi vysvětlují, co exec "[email protected]" dělá. Tato odpověď na Stack Overflow vysvětluje, proč je to důležité pro Docker, a jak tušíte, souvisí to se signály:

To je v Dockeru důležité pro správné připojení signálů. Například pokud byl Redis spuštěn bez exec , neobdrží SIGTERM na docker stop a nebude mít šanci se čistě vypnout. V některých případech to může vést ke ztrátě dat nebo zombie procesům.

Pokud podřízené procesy spustíte (tj. nepoužívejte exec ), nadřazený proces se stává odpovědným za zpracování a předávání signálů podle potřeby. To je jeden z důvodů, proč je nejlepší používat supervisord nebo podobně při spouštění více procesů v kontejneru, protože bude signály správně přeposílat.


"[email protected]" v Bourneovských shellech se v kontextech seznamu rozšiřuje na všechny poziční parametry jako samostatné argumenty.

Ve skriptu jsou zpočátku poziční parametry argumenty, které skript sám obdržel.

exec je spustit příkaz ve stejném procesu jako shell. To je poslední příkaz, který skript provede, protože po něm bude proces spouštět jiný příkaz než shell.

Pokud je tedy váš skript

#! /bin/sh -
exec "[email protected]"

A svůj skript zavoláte pomocí příkazového řádku shellu jako:

/path/to/your-script 'echo' "some  test" 'x y'

Zavolá exec s echo , some test a x y jako argumenty, které spustí echo (ve většině sh implementace, /bin/echo na rozdíl od echo shell vestavěný) ve stejném procesu, který dříve spouštěl shell interpretující váš skript pomocí some test a x y jako argumenty.


Linux
  1. Co dělá Echo $? Dělat??

  2. Co vrátí příkaz Ls -al .*?

  3. Co znamená hodnota symbolu z příkazu nm?

  1. Jak zjistit, co dělá příkaz Linuxu

  2. Co znamená syntaxe |&v jazyce shellu?

  3. Co dělá -e v bash shebang?

  1. Co dělá „lc_all=c“?

  2. Co znamená ` (backquote/backtick) v příkazech?

  3. Co dělá ?