Tienes pocas opciones. Una es detener el script ( CtrlZ), obtener el PID del script y enviarlo SIGKILL
al 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 kill
comando, el líder del proceso se denota así:
kill -PID
¿Dónde PID
está el ID de proceso del script?
Ejemplo:
Considere una secuencia de comandos test.sh
que 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
-INT
se 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 pgrep
para encontrar el PID.
Uno de los comandos que lanza el script puede ser atrapar SIGINT
, por lo que probablemente no CtrlCsea efectivo. Sin embargo, SIGKILL
no 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 SIGTERM
se puede configurar como un atajo de teclado el camino SIGINT
es.
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 pgrep
fallará.
Siempre use una línea shebang.
Ctrl + z