Actualización: trap
requiere eliminar el SIG
prefijo con la condición, aunque algunos shells admiten incluirlo. Ver comentario a continuación.
El signo "&" ejecuta un comando en segundo plano en un nuevo proceso. Cuando finaliza su proceso padre (el comando que ejecuta el script bash en su caso), este proceso en segundo plano restablecerá su proceso padre a init (proceso con PID
1), pero no morirá. Cuando presiona ctrl+c
, está enviando una señal de interrupción al proceso en primer plano, y no afectará el proceso en segundo plano.
Para eliminar el proceso en segundo plano, debe usar el kill
comando con el PID
del proceso en segundo plano más reciente, que puede obtener $!
.
Si desea utilizarlo ctrl+c
para eliminar tanto el script como el proceso en segundo plano, puede hacer esto:
trap 'kill $BGPID; exit' INT
sleep 1024 & # background command
BGPID=$!
sleep 1024 # foreground command of the script
trap
modifica el controlador de trampa de SIGINT
( trap
requiere la eliminación del SIG
prefijo, pero algunos shell pueden incluirlo) para que el script elimine el proceso $BGPID
antes de que salga.
Los programas pueden ignorar la
Ctrl+c
señal, ya que también pueden ignorar SIGTSTPPuedes probar
Ctrl+z
en la mayoría de las conchas (no siempre, pero la mayoría de las veces)Hay algunas señales que el proceso no puede ignorar: SIGKILL, SIGSTOP. Puedes enviar el comando kill. Para matar su proceso congelado, debe encontrar el ID de proceso (PID).
usa pgrep o ps y luego mátalo
fuente