Tienes pocas opciones. Una es detener el script ( CtrlZ), obtener el PID del script y enviarlo SIGKILLal grupo de proceso.
Cuando un comando se ejecuta en un shell, el proceso se inicia y todos sus elementos secundarios forman parte del mismo grupo de procesos (en este caso, el grupo de procesos en primer plano). Para enviar una señal a todos los procesos en este grupo, debe enviarla al líder del proceso. Para el killcomando, el líder del proceso se denota así:
kill -PID
¿Dónde PIDestá el ID de proceso del script?
Ejemplo:
Considere una secuencia de comandos test.shque inicia algunos procesos. Digamos que lo ejecutó en un shell:
$ ./test.sh
En otra terminal
$ pgrep test.sh
17802
$ pstree -ps `!!`
pstree -ps `pgrep test.sh`
init(1)───sshd(1211)───sshd(17312)───sshd(17372)───zsh(17788)───test.sh(17802)─┬─dd(17804)
├─sleep(17805)
└─yes(17803)
En este caso, para enviar una señal al grupo de procesos creado por test.sh, haría lo siguiente:
kill -INT -17802
-INTse usa para enviar SIGINT, por lo que este comando equivale a presionar CtrlCel terminal. Para enviar SIGKILL:
kill -KILL -17802
Solo necesita detener el script si no puede abrir otra terminal. Si puede, use pgreppara encontrar el PID.
Uno de los comandos que lanza el script puede ser atrapar SIGINT, por lo que probablemente no CtrlCsea efectivo. Sin embargo, SIGKILLno puede quedar atrapado, y generalmente es una opción de último recurso . Es posible que desee probar SIGTERM( -TERM) antes de matar. Ninguno de los dos SIGKILL, o SIGTERMse puede configurar como un atajo de teclado el camino SIGINTes.
Todo esto es discutible si su script no contiene una línea shebang. De esta respuesta SO :
Por lo general, el shell principal adivina que el script está escrito para el mismo shell (un mínimo de shells tipo Bourne ejecuta el script con / bin / sh, bash lo ejecuta como un subproceso bash) ...
Debido a esto, cuando se ejecuta el script, no encontrará un proceso con el nombre del script (o un proceso con el nombre del script en la línea de comando) y pgrepfallará.
Siempre use una línea shebang.
Ctrl + z