Actualización: traprequiere eliminar el SIGprefijo 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 PID1), 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 killcomando con el PIDdel proceso en segundo plano más reciente, que puede obtener $!.
Si desea utilizarlo ctrl+cpara 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
trapmodifica el controlador de trampa de SIGINT( traprequiere la eliminación del SIGprefijo, pero algunos shell pueden incluirlo) para que el script elimine el proceso $BGPIDantes de que salga.
Los programas pueden ignorar la
Ctrl+cseñal, ya que también pueden ignorar SIGTSTPPuedes probar
Ctrl+zen 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