%60%20sin%20realizar%20m%C3%A1s%20cambios%20en%20c%C3%B3mo%20%60execve()%60%20trata%20las%20disposiciones%20de%20las%20se%C3%B1ales%3F.png)
El manual de Bash dice
Cuando se va a ejecutar un comando simple que no sea una función incorporada o del shell, ... las trampas capturadas por el shell se restablecen alos valores heredados del padre del shelly las trampas ignoradas por el shell se ignoran
Durante un execve(2), las disposiciones de las señales manejadas se restablecen ael valor por defecto; las disposiciones de las señales ignoradas no se modifican."
¿Son iguales "los valores predeterminados" y "los valores heredados del padre del shell"?
¿Bash llama execve()
sin realizar más cambios en la forma en que execve()
trata las disposiciones de las señales?
Gracias.
Respuesta1
No, "el valor predeterminado" y "los valores heredados del padre del shell" no son lo mismo. En el caso de execve, "el valor predeterminado" se refiere a SIG_DFL
, lo que provoca la acción predeterminada según lo especificado porman 7 signal
. En el caso de bash, "los valores heredados del padre del shell" significan exactamente lo que dice; Si dicha señal fue ignorada ( SIG_IGN
) por su padre, también será ignorada por su hijo.
Una clave para entender lo que está pasando aquí es la palabra "manejado". Se refiere a una función de manejo de señales personalizada, distinta de SIG_DFL
o SIG_IGN
. Debe restablecerlo mediante execve, ya que el nuevo proceso no tendrá la función de controlador de señales que usaba el proceso anterior.
Tenga en cuenta que las versiones más recientes de la página de manual de execve se refieren a las señales "manejadas" como señales "captadas", para estar en línea con la terminología utilizada por el resto de Linux. Esto sigue siendo distinto de las señales predeterminadas e ignoradas.
Versión simple: si bash o el padre de bash tenían una señal marcada como SIG_IGN
, también estará SIG_IGN
en el nuevo hijo. De lo contrario, estará SIG_DFL
en el nuevo niño. Nunca puede ser un controlador en el nuevo hijo, ya que no existirá ningún controlador de bash o su padre en el nuevo hijo.