Históricamente hubo tres señales vinculadas a las pulsaciones de teclas, estas fueron
- SIGINT (Intettput) generalmente Ctrl+ CoDel
- SIGQUIT - Salir - Generalmente vinculado a Ctrl+\
- SIGSUSP Suspender: generalmente vinculado a Ctrl+Z
En algunos sabores * nix, también hay otras señales enlazadas, puede verificar los enlaces del teclado con el comando
stty -a
En mi sistema, OS / X, esto produce el siguiente resultado
speed 9600 baud; 65 rows; 213 columns;
lflags: icanon isig iexten echo echoe -echok echoke -echonl echoctl
-echoprt -altwerase -noflsh -tostop -flusho pendin -nokerninfo
-extproc
iflags: -istrip icrnl -inlcr -igncr ixon -ixoff ixany imaxbel iutf8
-ignbrk brkint -inpck -ignpar -parmrk
oflags: opost onlcr -oxtabs -onocr -onlret
cflags: cread cs8 -parenb -parodd hupcl -clocal -cstopb -crtscts -dsrflow
-dtrflow -mdmbuf
cchars: discard = ^O; dsusp = ^Y; eof = ^D; eol = <undef>;
eol2 = <undef>; erase = ^?; intr = ^C; kill = ^U; lnext = ^V;
min = 1; quit = ^\; reprint = ^R; start = ^Q; status = ^T;
stop = ^S; susp = ^Z; time = 0; werase = ^W;
Tenga en cuenta que kill en este caso no es una señal de KILL que tiene que ver con borrar el búfer de entrada actual.
Es posible que tenga más éxito al detener los procesos con SIGQUIT, pero esto puede no ser cierto ya que el proceso puede captar la señal e ignorarla.
No existe el concepto de una lista de procesos "interrumpidos", ya que el proceso captó e ignoró la interrupción o salió. Puede obtener una lista de procesos suspendidos escribiendo trabajos
stty -ixon
para que se pasen. Creo que cambiarían a<undef>
.Muchas respuestas correctas, pero ninguna que esté completa.
Para finalizar con prejuicios extremos y sin permitir que el proceso lo detenga, use SIGKILL, que no está vinculado a ninguna tecla de forma predeterminada. En su lugar, generalmente lo envía utilizando el
kill (1)
comando y especificando la señal para enviar como eno mnemónicamente
El sistema operativo maneja esta señal directamente y el programa no puede anular el comportamiento predeterminado.
Si su shell admite el control del trabajo, también puede admitir una versión incorporada
kill
que admita la identificación del trabajo utilizando el%
carácter como en la respuesta de la pasarela .fg
fin de continuar con el control del terminal obg
configurarlo para que se ejecute sin mantener el control del terminal (pero, de forma predeterminada, todavía envía su salida allí).fuente
para ver la lista de procesos en segundo plano:
jobs
matar:
kill %1
(sustituya 1 con la identificación de trabajo correspondiente como en lajobs
salida)fuente
Ctrl-C envía SIGINT, que por defecto hace que un proceso finalice, pero puede quedar atrapado (en
\bin sh
, usandotrap
).SIGKILL es la señal de muerte intransferible.
Editar Tercera vez, creo que esto es correcto: he comprobado todo con los documentos. Ya veremos.
fuente
Esto no está claro para la mayoría de los novatos de la terminal, pero si su problema es solo que está en un programa interactivo y no puede encontrar la manera de salir, a menudo
q
saldrá. Por ejemplo, esta es la clave para salirless
, que también es el programa que obtienes cuando vesman
páginas, entre otras cosas.Algunos programas tienen otros atajos de teclado para salir. En
vim
ovi
, usoESC:wq
. Enemacs
, usoControl-C Control-X
. Ennano
opico
, usoControl-X
. Tenga en cuenta que en estos ejemplos hay sutilezas, en particular, con respecto a si esos accesos directos guardan o no los cambios que haya realizado en el archivo que está editando.fuente
Muchos procesos pueden instalar un controlador de interrupciones para capturar la señal de interrupción, pero los que no lo hacen abortarán de forma predeterminada.
Para forzar el cierre de un proceso, puede enviar SIGQUIT (Ctrl- \).
fuente
Parece que las otras respuestas son el escenario probable, pero también es posible que esté ejecutando un script que no maneja a sus hijos correctamente. Recientemente llegué a un escenario similar, donde matar un script no mataría los procesos secundarios de ese script.
En general, si se encuentra en esta situación, tendrá que revisar todos los procesos que está ejecutando. Deberías revisar la página de manual para ps. (
man ps
) Me gusta especialmente usarps auxwf
, que muestra la relación padre / hijo entre los procesos.pstree
hace algo similar Debe ejecutar esto desde otra terminal antes de finalizar el proceso para ver cómo se ven las cosas en la situación normal e identificar los procesos secundarios.Si luego matas (con ^ C) ese proceso principal, verifica la salida de ps nuevamente para ver si algo ha cambiado. Si los procesos secundarios aún están disponibles, puede eliminarlos con el
kill
comando. (verman kill
)fuente