Contexto:
Los usuarios me proporcionan sus scripts personalizados para ejecutar. Estos scripts pueden ser de cualquier tipo, como scripts para iniciar múltiples programas GUI, servicios de back-end. No tengo control sobre cómo se escriben los guiones. Estos scripts pueden ser de tipo de bloqueo, es decir, la ejecución espera hasta que todos los procesos secundarios (programas que se ejecutan secuencialmente) salen
#exaple of blocking script
echo "START"
first_program
second_program
echo "DONE"
o tipo no bloqueante, es decir, aquellos que bifurcan el proceso secundario en segundo plano y salen como
#example of non-blocking script
echo "START"
first_program &
second_program &
echo "DONE"
¿Qué estoy tratando de lograr?
Los scripts proporcionados por el usuario pueden ser de cualquiera de los dos tipos anteriores o una combinación de ambos. Mi trabajo es ejecutar el script y esperar hasta que todos los procesos iniciados por él salgan y luego apague el nodo. Si es de tipo de bloqueo, el caso es simple, es decir, obtenga el PID del proceso de ejecución del script y espere hasta que ps -ef | grep -ef PID no tenga más entradas. Los scripts sin bloqueo son los que me están dando problemas
¿Hay alguna manera de obtener una lista de PID de todos los procesos secundarios generados por la ejecución de un script? Cualquier sugerencia o sugerencia será muy apreciada
grep, solo ps –udummy_user. Además, observe los grupos de procesos.
pssin ningún argumento (debe ser solo bashy psal principio). Comience su secuencia de comandos allí. Después de que termine, espere hasta que ps | wc -lalcance el valor esperado.
pid$(foo.sh; echo $!)que le dará el PIDfoo.shpara que luego pueda usarps --ppid. ¿Eso funcionará?