GNU/Linux >> Tutoriels Linux >  >> Linux

Que fait `exec [email protected]` ?

Le "[email protected]" bit s'étendra à la liste des paramètres de position (généralement les arguments de la ligne de commande), entre guillemets individuellement pour éviter le fractionnement des mots et la génération de noms de fichiers ("globbing").

Le exec remplacera le processus courant par le processus résultant de l'exécution de son argument.

En bref, exec "[email protected]" exécutera la commande donnée par les paramètres de la ligne de commande de manière à ce que le processus en cours soit remplacé par celle-ci (si le exec est capable d'exécuter la commande du tout).


Deux autres réponses expliquent ce que exec "[email protected]" Est-ce que. Cette réponse sur Stack Overflow explique pourquoi c'est important pour Docker, et comme vous le supposez, cela a à voir avec les signaux :

Ceci est important dans Docker pour que les signaux soient correctement proxy. Par exemple, si Redis a été démarré sans exec , il ne recevra pas de SIGTERM sur docker stop et n'aura pas la chance de s'arrêter proprement. Dans certains cas, cela peut entraîner une perte de données ou des processus zombies.

Si vous démarrez des processus enfants (c'est-à-dire n'utilisez pas exec ), le processus parent devient responsable de la gestion et de la transmission des signaux, le cas échéant. C'est l'une des raisons pour lesquelles il est préférable d'utiliser supervisord ou similaire lors de l'exécution de plusieurs processus dans un conteneur, car il transmettra les signaux de manière appropriée.


"[email protected]" dans les shells de type Bourne, dans les contextes de liste, s'étend à tous les paramètres de position en tant qu'arguments séparés.

Dans un script, initialement, les paramètres positionnels sont les arguments que le script lui-même a reçus.

exec consiste à exécuter une commande dans le même processus que le shell. C'est la dernière commande qu'un script exécutera car après cela, le processus exécutera une autre commande que le shell.

Donc, si votre script est

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

Et vous appelez votre script en utilisant une ligne de commande shell comme :

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

Il appellera exec avec echo , some test , et x y comme arguments qui exécuteront echo (dans la plupart des sh implémentations, /bin/echo par opposition au echo shell intégré) dans le même processus qui exécutait précédemment le shell interprétant votre script avec some test et x y comme arguments.


Linux
  1. Que renvoie la commande Ls -al .* ?

  2. Que signifie la valeur du symbole de la commande nm ?

  3. Que signifie [email protected] dans un script shell ?

  4. Que signifie - dans cette commande Linux ?

  5. Que signifie la syntaxe |&en langage shell ?

Commande de fichier Linux :que fait-elle et comment l'utiliser

ExplainShell - Trouvez ce que fait chaque partie d'une commande Linux

Que fait sudo apt-get update

Que signifie la commande Cat sous Linux ?

Que fait la commande Startx ?

Que signifie &à la fin d'une commande Linux ?