GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was macht "exec [email protected]"?

Der "[email protected]" bit wird auf die Liste der Positionsparameter (normalerweise die Kommandozeilenargumente) erweitert, die einzeln in Anführungszeichen gesetzt werden, um Wortaufteilung und Dateinamengenerierung ("Globbing") zu vermeiden.

Die exec ersetzt den aktuellen Prozess durch den Prozess, der aus der Ausführung seines Arguments resultiert.

Kurz gesagt, exec "[email protected]" führt den durch die Kommandozeilenparameter gegebenen Befehl so aus, dass der aktuelle Prozess durch ihn ersetzt wird (wenn die exec überhaupt in der Lage ist, den Befehl auszuführen).


Zwei weitere Antworten erklären, was exec "[email protected]" ist tut. Diese Antwort auf Stack Overflow erklärt, warum es für Docker wichtig ist, und wie Sie vermuten, hat es mit Signalen zu tun:

Dies ist in Docker wichtig, damit Signale korrekt weitergeleitet werden. Zum Beispiel, wenn Redis ohne exec gestartet wurde , erhält es keinen SIGTERM auf docker stop und wird keine Chance bekommen, sauber herunterzufahren. In einigen Fällen kann dies zu Datenverlust oder Zombie-Prozessen führen.

Wenn Sie untergeordnete Prozesse starten (d. h. nicht exec ), wird der übergeordnete Prozess für die angemessene Verarbeitung und Weiterleitung von Signalen verantwortlich. Dies ist einer der Gründe, warum es am besten ist, supervisord zu verwenden oder ähnliches, wenn mehrere Prozesse in einem Container ausgeführt werden, da die Signale entsprechend weitergeleitet werden.


"[email protected]" in Bourne-ähnlichen Shells wird in Listenkontexten auf alle Positionsparameter als separate Argumente erweitert.

In einem Skript sind die Positionsparameter anfänglich die Argumente, die das Skript selbst empfangen hat.

exec besteht darin, einen Befehl im selben Prozess wie die Shell auszuführen. Das ist der letzte Befehl, den ein Skript ausführt, da der Prozess danach einen anderen Befehl als die Shell ausführt.

Also, wenn Ihr Skript ist

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

Und Sie rufen Ihr Skript über eine Shell-Befehlszeile auf wie:

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

Es wird exec aufgerufen mit echo , some test , und x y als Argumente, die echo ausführen (in den meisten sh Implementierungen, /bin/echo im Gegensatz zu echo Shell builtin) im selben Prozess, der zuvor die Shell ausgeführt hat, die Ihr Skript mit some test interpretiert und x y als Argumente.


Linux
  1. Was gibt der Befehl Ls -al .* zurück?

  2. Was bedeutet Symbolwert vom nm-Befehl?

  3. Was bedeutet [email protected] in einem Shell-Skript?

  4. Was bedeutet &am Ende eines Linux-Befehls?

  5. Was bedeutet - in diesem Linux-Befehl?

Linux-Dateibefehl:Was macht er und wie wird er verwendet?

ExplainShell – Finden Sie heraus, was jeder Teil eines Linux-Befehls tut

Was macht sudo apt-get update?

Was bedeutet Cat-Befehl unter Linux?

Was bedeutet Exec 3?

Was macht der Startx-Befehl?