He visto programas de supervisión en scripts que comprueban el estado del proceso usando 'ps' o 'estado del servicio (en Linux)' periódicamente, o en C/C++ que bifurca y espera en el proceso ...subproceso bash restart con la aplicación SIGCHLD?
I ¿Se pregunta si es posible usar bash con trap y reiniciar el subproceso cuando recibió SIGCLD?
He probado una suite básica en RedHat Linux con siguiente idea (y ciertamente no funcionó ...)
#!/bin/bash
set -o monitor # can someone explain this? discussion on Internet say this is needed
trap startProcess SIGCHLD
startProcess() {
/path/to/another/bash/script.sh & # the one to restart
while [ 1 ]
do
sleep 60
done
}
startProcess
lo que la escritura del golpe que se inició simplemente dormir durante unos segundos y la salida de ahora.
varios problemas observados:
- cuando el proyectil se inicia en primer plano, SIGCHLD serán tratados sólo una vez. Cómo funciona la señal de restablecimiento de trampa como señal()?
- el script y su hijo parecen ser inmunes a SIGINT, lo que significa que no pueden ser detenidos por^C
- ya que no se puede cerrar, cerré el terminal. El guión parece ser HUP y quedan muchos zombis.
- cuando se ejecuta en segundo plano, la secuencia de comandos de terminal causado a morir
... de todos modos, esto no funciona en absoluto. Debo decir que sé muy poco sobre este tema. ¿Alguien puede sugerir o dar algunos ejemplos de trabajo? ¿Hay scripts para tal uso?
¿qué le parece usar wait in bash, entonces?
Gracias
Gracias Jimmy, por compartir e incluso probar el terrible guión. He detenido el intento, usando la forma "tradicional" de hacerlo, un bucle y comprobando uno. Sin embargo, probé el de "esperar", realmente funciona muy bien en escenarios básicos. ! '#/Bin/bash thepid = 0 StopNow = 0 conjunto -O monitorear trampa de limpieza SIGINT SIGTERM limpieza() { trampa - SIGINT SIGTERM StopNow = 1 si [$ {} thepid -ne 0] continuación echo $ matando {} thepid kill $ {} thepid fi } mientras que [$ {} StopNow -ne 1] hacen eco que empieza ./trial.sh y thepid = $! echo "esperando $ {thepid}" espera $ {thepid} hecho salida 0 ' –