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.
ps
sin ningún argumento (debe ser solo bash
y ps
al principio). Comience su secuencia de comandos allí. Después de que termine, espere hasta que ps | wc -l
alcance el valor esperado.
pid$(foo.sh; echo $!)
que le dará el PIDfoo.sh
para que luego pueda usarps --ppid
. ¿Eso funcionará?