shell script para desovar procesos, terminar niños en SIGTERM
-
13-09-2019 - |
Pregunta
Quiero escribir un script que genera varios procesos de larga duración en el fondo, luego cuelga alrededor. Al recibir SIGTERM, quiero que todos los subprocesos para terminar así.
Básicamente, quiero un "proceso maestro".
Esto es lo que tengo hasta ahora:
#!/bin/sh
sleep 600 &
PID1="$!"
sleep 600 &
PID2="$!"
# supposedly this should kill the child processes on SIGTERM.
trap "kill $PID1 $PID2" SIGTERM
wait
El script anterior falla con trap: 10: SIGTERM: bad trap
.
Edit: Estoy usando Ubuntu 9.04
Solución 2
La respuesta de Joe me puso en el camino correcto. También descubrí que debería atrapar más señales para cubrir mis bases.
guión final es el siguiente:
#!/bin/sh
sleep 600 &
PID1="$!"
sleep 600 &
PID2="$!"
trap "kill $PID1 $PID2" exit INT TERM
wait
Otros consejos
Sospecho que su / bin / sh no es un golpe (aunque la cuestión etiquetado como 'Bash').
A partir del mensaje que supongo que es un guión. Compruebe su manual o simplemente arreglar su tinglado si necesita escribir código Bash.
Este script es correcto y funciona para mí como se esperaba.
¿Cómo se envía la señal SIGTERM al "proceso maestro"?
Tal vez debería ejecutar kill -l
para comprobar las señales que se apoya.
Como sugiere el mensaje de error se envía la señal "10", que no parece que el sistema reconozca.
Y la próxima vez que usted debe agregar el sistema operativo, la versión cáscaras, huesos, ... para una pregunta tan