script di shell per deporre le uova processi, termina bambini su SIGTERM
-
13-09-2019 - |
Domanda
Voglio scrivere uno script di shell che genera diversi processi di lunga esecuzione in background, poi si blocca intorno. Alla ricezione di SIGTERM, voglio che tutti i sottoprocessi per terminare pure.
In sostanza, voglio un "processo di master".
Ecco quello che ho ottenuto finora:
#!/bin/sh
sleep 600 &
PID1="$!"
sleep 600 &
PID2="$!"
# supposedly this should kill the child processes on SIGTERM.
trap "kill $PID1 $PID2" SIGTERM
wait
Lo script di cui sopra non riesce con trap: 10: SIGTERM: bad trap
.
Edit: sto usando Ubuntu 9.04
Soluzione 2
La risposta di Joe mi ha messo sulla strada giusta. Ho anche scoperto che dovrei trappola più segnali per coprire le mie basi.
finale del copione è simile al seguente:
#!/bin/sh
sleep 600 &
PID1="$!"
sleep 600 &
PID2="$!"
trap "kill $PID1 $PID2" exit INT TERM
wait
Altri suggerimenti
Ho il sospetto che il vostro / bin / sh non è un Bash (anche se si contrassegnati la questione 'Bash').
Dal messaggio Credo che sia un trattino. Controllare il suo manuale o semplicemente risolvere il faccenda se è necessario scrivere codice Bash.
Questo script è corretto e funziona per me come previsto.
Come si fa a mandare il segnale SIGTERM al "processo di master"?
Forse si dovrebbe eseguire kill -l
per verificare che i segnali sono supportati.
Come suggerisce il messaggio di errore si invia il segnale "10", che il sistema non sembra riconoscere.
E la prossima volta che si dovrebbe aggiungere il sistema operativo, la versione della shell, kernel, ... per una questione del genere