¿Alternativa a los "segundos de sueño" que tiene en cuenta la carga del sistema?

¿Alternativa a los "segundos de sueño" que tiene en cuenta la carga del sistema?

Entonces desarrollo mi aplicación de servidor y algunas aplicaciones de cliente para ella. Después de cada reconstrucción, inicio mi servidor (que tiende a cargar todos los servicios durante aproximadamente 2 segundos) y luego inicio mis clientes... Así que esto es lo que tengo en miguion:

cd $RUN_DIR
nohup ./CloudServer >& /dev/null &
sleep 5
nohup ./CloudClient --server=localhost --username=$ROBOT1_NAME --robot >& /dev/null &
nohup ./CloudClient --server=localhost --username=$ROBOT2_NAME --robot >& /dev/null &

Me pregunto si hay alternativas sleepen Bash. ¿Esperar al menos 5 segundos y luego hasta que la actividad de la CPU en el proceso Xbaje al 1% y luego iniciar lo que necesito?

Respuesta1

Es posible que necesites cambiar algunas cosas como los criterios grep y el umbral de CPU, pero aquí va:

#!/bin/bash
cd $RUN_DIR
nohup ./CloudServer >& /dev/null &
PID=`ps aux |grep $RUN_DIR/CloudServer|grep -v grep| head -n 1 |awk '{print $2}'`

while [ `top -n 1 -b -p $PID | grep $PID |awk '{print $9"/1"}' |bc` -gt 1 ]
do
        sleep 2
        echo Server still starting up ...
done
echo Server is now Idle
nohup ./CloudClient --server=localhost --username=$ROBOT1_NAME --robot >& /dev/null &
nohup ./CloudClient --server=localhost --username=$ROBOT2_NAME --robot >& /dev/null &

También puedes cambiar el tiempo de sueño si lo deseas.

información relacionada