He visto ejemplos de scripts de envoltura que, en pocas palabras, son los siguientes:
#!/bin/bash
myprog=sleep
echo "This is the wrapper script, it will exec "$myprog""
exec "$myprog" "$@"
Como se ve arriba, usan exec
para reemplazar el shell recién creado casi inmediatamente con el $myprog
. Se podría lograr lo mismo sin exec
:
#!/bin/bash
myprog=sleep
echo "This is the wrapper script, it will exec "$myprog""
"$myprog" "$@"
En este último ejemplo, se inicia una nueva instancia de bash y luego $myprog
se inicia como un proceso secundario de la instancia de bash.
¿Cuáles son los beneficios del primer enfoque?
exec
construcción del shell .Respuestas:
El uso
exec
hace que el contenedor sea más transparente, es decir, hace que sea menos probable que el usuario o la aplicación que llama al script necesite tener en cuenta que se trata de un relé que a su vez inicia el programa "real".En particular, si la persona que llama quiere matar el programa, simplemente matará el proceso que acaba de iniciar. Si la secuencia de comandos del reiniciador ejecuta un proceso secundario, la persona que llama necesitaría saber que debería averiguar el elemento secundario del reiniciador y eliminarlo. El script de envoltura podría establecer una trampa para transmitir algunas señales, pero eso no funcionaría con SIGSTOP o SIGKILL, que no se puede atrapar.
Las llamadas
exec
también ahorran un poco de memoria (y otros recursos como PID, etc.) ya que no es necesario mantener un shell adicional sin nada que hacer.Si hay varios contenedores, los problemas se suman (dificultad para encontrar el proceso correcto para matar, sobrecarga de memoria, etc.).
Algunos shells (por ejemplo, el shell de Korn) detectan automáticamente cuándo un comando es el último y no hay una trampa activa y ponen una implícita
exec
, pero no todos lo hacen (por ejemplo, no bash).fuente
Al no encontrar duplicados ... consulte el manual de FreeBSD , que brinda una razón suficiente:
que es esencialmente la razón que me explicó hace bastante tiempo (por uno de los porteros), y es bastante conocida.
fuente