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

¿Fue útil?

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

Esto funciona para mí:

trap "trap - SIGTERM && kill -- -$$" SIGINT SIGTERM EXIT
  • kill -- -$$ envía una SIGTERM a todo el grupo de procesos , matando así también descendientes.

  • Especificación EXIT señal es útil cuando se utiliza set -e (más detalles aquí ).

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top