Qu'est-ce qui se passe ici ?
Vous avez un processus qui exécute un shell. D'après les informations données dans la question affichée, on suppose qu'il s'agit d'une zsh
mais d'autres peuvent être possibles. Lorsque le script posté est exécuté, un nouveau processus est créé pour exécuter le script dans une /bin/sh
. Ce nouveau processus démarre trois nouvelles tâches d'arrière-plan associées à la /bin/sh
. Le site /bin/sh
puis se termine, laissant les trois travaux comme des processus orphelins. Ainsi, lorsque le jobs
est saisie, les trois tâches n'apparaissent pas, car ces trois processus désormais orphelins n'ont jamais été des tâches de la commande d'origine zsh
. En outre, lorsque le zsh
se termine, aucun signal de type terminaison n'est envoyé aux trois jobs car les processus sont orphelins.
Comment puis-je le réparer ?
S'il est nécessaire que les trois emplois apparaissent lorsque l'enquête de l jobs
est saisie, alors un .
o source
peut précéder le chemin et le nom de scripts. Le scripts sera exécuté dans le dossier courant de l'utilisateur. zsh
et donc la première ligne du script affiché sera ignorée. Par exemple, si le nom du script est myscript
et se trouve dans le répertoire de travail actuel, alors l'une ou l'autre des commandes suivantes peut être saisie.
. ./myscript
source ./myscript
En cas de besoin, il n'est pas nécessaire que les trois emplois apparaissent lorsque la jobs
est saisie, puis une ligne contenant la commande wait
pourrait être annexée au script affiché. Cela empêchera les orphelins d'être créés, lorsque la commande suivante est utilisée pour exécuter le script en arrière-plan.
./myscript &
Enfin, l'idée d'un script pourrait être abandonnée en faveur d'une fonction à la place. Voici un exemple.
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"
}