Le contexte:
Les utilisateurs me fournissent leurs scripts personnalisés à exécuter. Ces scripts peuvent être de toute sorte comme des scripts pour démarrer plusieurs programmes GUI, des services backend. Je n'ai aucun contrôle sur la façon dont les scripts sont écrits. Ces scripts peuvent être de type bloquant, c'est-à-dire que l'exécution attend que tous les processus enfants (programmes exécutés de manière séquentielle) se terminent
#exaple of blocking script
echo "START"
first_program
second_program
echo "DONE"
ou de type non bloquant, c'est-à-dire ceux qui bifurquent le processus enfant en arrière-plan et sortent quelque chose comme
#example of non-blocking script
echo "START"
first_program &
second_program &
echo "DONE"
Qu'est-ce que j'essaie de réaliser?
Les scripts fournis par l'utilisateur peuvent être de l'un des deux types ci-dessus ou mélanger les deux. Mon travail consiste à exécuter le script et à attendre que tous les processus démarrés par celui-ci se terminent puis à arrêter le nœud. S'il s'agit d'un type de blocage, la casse est simple, c'est-à-dire obtenir le PID du processus d'exécution de script et attendre que ps -ef | grep -ef PID n'ait plus d'entrées. Les scripts non bloquants sont ceux qui me posent problème
Existe-t-il un moyen d'obtenir la liste des PID de tous les processus enfants générés par l'exécution d'un script? Tous les pointeurs ou indices seront très appréciés
grep
, juste ps –udummy_user
. Regardez également les groupes de processus.
ps
sans aucun argument (devrait être uniquement bash
et ps
au début). Commencez votre script là-bas. Une fois l'opération terminée, attendez que ps | wc -l
la valeur attendue soit atteinte.
pid$(foo.sh; echo $!)
qui vous donnera le PID defoo.sh
sorte que vous puissiez ensuite utiliserps --ppid
. Ça marchera?