Finalizar trabajos en segundo plano
En este paso, aprenderá diferentes formas de terminar trabajos en segundo plano cuando ya no sean necesarios. La terminación adecuada de los trabajos es importante para liberar recursos del sistema y mantener el rendimiento del sistema.
Identificar trabajos para terminar
Primero, veamos qué trabajos están actualmente en ejecución:
jobs
Debería ver su tarea en segundo plano en ejecución:
[1] + running ~/project/background_task.sh
Si desea información más detallada, incluyendo el ID de proceso (PID, por sus siglas en inglés), use:
jobs -l
Esto mostrará una salida similar a:
[1] + 1456 running ~/project/background_task.sh
Tome nota del PID (el número después del número de trabajo), ya que se puede utilizar para terminar el proceso.
Método 1: Terminar un trabajo usando su número de trabajo
La forma más directa de terminar un trabajo en segundo plano es usar el comando kill con el número de trabajo:
kill %1
Compruebe si el trabajo se ha terminado:
jobs
Puede ver:
[1] + terminated ~/project/background_task.sh
Si el trabajo todavía está en ejecución (algunos procesos pueden requerir una señal de terminación más fuerte), puede usar:
kill -9 %1
La bandera -9 envía una señal SIGKILL, que termina forzosamente el proceso sin permitirle realizar tareas de limpieza.
Método 2: Terminar un trabajo usando su PID
Comencemos otra instancia de nuestro script en segundo plano:
~/project/background_task.sh &
Debería ver una salida que muestra el número de trabajo y el PID:
[1] 1567
Para terminar este trabajo usando su PID, use:
kill 1567
Reemplace 1567 con el PID real de su trabajo.
Verifique que el trabajo se ha terminado:
jobs
Método 3: Usar el nombre del proceso con killall
Comencemos otra instancia de nuestro script:
~/project/background_task.sh &
Si tiene múltiples instancias del mismo proceso en ejecución, puede terminar todas ellas a la vez usando el comando killall:
killall background_task.sh
Este comando termina todos los procesos con el nombre background_task.sh.
Verifique que no hay trabajos en ejecución:
jobs
No debería haber salida, lo que indica que todos los trabajos en segundo plano se han terminado.
Comprender las señales de terminación
Cuando se usa el comando kill, se está enviando una señal al proceso. Por defecto, kill envía la señal SIGTERM (señal 15), que le pide al proceso que se termine de forma elegante. Si un proceso no responde a SIGTERM, puede usar SIGKILL (señal 9) para forzar la terminación:
kill -TERM %1 ## Lo mismo que kill %1
kill -KILL %1 ## Lo mismo que kill -9 %1
Otras señales útiles incluyen:
- SIGHUP (señal 1): A menudo se utiliza para recargar archivos de configuración.
- SIGINT (señal 2): Lo mismo que presionar Ctrl+C.
- SIGSTOP (señal 19): Suspende un proceso (no se puede capturar ni ignorar).
- SIGCONT (señal 18): Continúa un proceso detenido.
Para una última demostración, comencemos nuestra tarea en segundo plano nuevamente y luego terminémosla:
~/project/background_task.sh &
jobs
kill %1
jobs
Esta secuencia inicia el trabajo, confirma que está en ejecución, lo termina y luego verifica que ya no está en ejecución.