bash - resueltos - script de shell para generar procesos, terminar hijos en SIGTERM
scripts linux ejercicios resueltos (4)
Quiero escribir un script de shell que genera varios procesos de larga ejecución en segundo plano, y luego se cuelga. Al recibir SIGTERM, quiero que todos los subprocesos terminen también.
Básicamente, quiero un "proceso maestro".
Esto es lo que obtuve 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
.
Editar: estoy usando Ubuntu 9.04
Este script se ve correcto y funciona para mí como se esperaba.
¿Cómo se envía la señal SIGTERM al "proceso maestro"? Tal vez deberías ejecutar kill -l
para verificar qué señales son compatibles. Como el mensaje de error sugiere que envíe la señal "10" que su sistema no parece reconocer.
Y la próxima vez debería agregar el sistema operativo, la versión del shell, kernel, ... para esa pregunta
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.
El script final se ve así:
#!/bin/sh
sleep 600 &
PID1="$!"
sleep 600 &
PID2="$!"
trap "kill $PID1 $PID2" exit INT TERM
wait
Sospecho que tu / bin / sh no es un Bash (aunque etiquetaste la pregunta como ''Bash'').
Del mensaje, supongo que es un DASH. Verifique su manual o simplemente arregle su shebang si necesita escribir el código Bash.