¿Qué está pasando aquí?
Tienes un proceso que ejecuta un shell. Basado en la información dada en la pregunta publicada, se asume que este es un zsh
pero otros pueden ser posibles. Cuando se ejecuta el script publicado, se crea un nuevo proceso para ejecutar el script en un /bin/sh
. Este nuevo proceso inicia tres nuevos trabajos en segundo plano asociados al /bin/sh
. El /bin/sh
termina entonces, dejando los tres trabajos como procesos huérfanos. Así, cuando el jobs
los tres trabajos no aparecen, porque los tres procesos ahora huérfanos nunca fueron trabajos del zsh
. Además, cuando el zsh
termina, no se envían señales de tipo de terminación a los tres trabajos porque los procesos son huérfanos.
¿Cómo puedo solucionarlo?
Si es necesario que los tres trabajos aparezcan cuando el jobs
se introduce un comando, entonces un .
o source
puede preceder a la ruta y al nombre de scripts. El scriptsscriptscripts se ejecutará en el zsh
y por lo tanto la primera línea en el script publicado será ignorada. Por ejemplo, si el nombre del script es myscript
y está en el directorio de trabajo actual, entonces se podría introducir cualquiera de las siguientes opciones.
. ./myscript
source ./myscript
Si es necesario no hay necesidad de que aparezcan los tres trabajos cuando el jobs
se introduce una línea que contiene el comando wait
puede ser anexado al script publicado. Esto evitará que se creen huérfanos, cuando se utilice lo siguiente para ejecutar el script en segundo plano.
./myscript &
Por último, la idea de un script podría abandonarse en favor de una función. A continuación se muestra un ejemplo.
myfunction()
{
local "cwd=$(pwd)"
cd /Users/mc/src/crypto/
local "n=$?"
if [[ n -eq 0 ]]; then
streamlit run dashboard.py &
streamlit run dashboard_basis_viewer.py &
/Users/mc/.virtualenvs/crypto/bin/python basis_calculator.py &
n="$?"
fi
cd "$cwd"
return "$n"
}