He buscado respuestas y hasta ahora no he encontrado nada para responder mi pregunta. Actualmente estoy iniciando sesión en mi servidor Ubuntu y al ejecutar un proceso no puedo ejecutar ninguna de las interrupciones en él. Aquí está mi stty -a:
user@Ubuntu1:~$ stty -a
speed 38400 baud; rows 93; columns 200; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = M-^?; eol2 = M-^?;
swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V;
flush = ^O; min = 1; time = 0;
No tengo nada en mi .bashrc que cambie las interrupciones.
Esto es lo mismo para todos los usuarios, incluido el root. También he intentado iniciar sesión desde diferentes ubicaciones utilizando diferentes terminales y cada vez que aparece este mismo resultado. He utilizado tanto ssh como ssh -X para iniciar sesión.
Editar: localmente todas mis interrupciones funcionan bien.
Actualización: todavía estoy buscando una respuesta. Mi amigo tiene exactamente el mismo problema. El problema parece ser que al iniciar sesión (desde PC, Mac, Linux) el teclado no recoge estas teclas (aunque esté correctamente asignado).
fuente
Ctrl+V
y el golpeCtrl+C
? ¿Has intentado matar el proceso conkill -s 2 <pid_of_process>
? Esto debería ser igual a enviar la señal SIGINT al proceso. Verifique la configuración de las teclas del emulador de terminal.Ctrl+C
mientras ejecutas otro proceso (por ejemplocat
)? Quizás es ese proceso el que ignoraCtrl+C
. ¿O quiere decir que localmente en el servidor Ubuntu, ese proceso particular respondeCtrl+C
, en cuyo caso, en qué terminal probó? ¿Qué tal unascreen
sesión?kill -s 2
(tenga en cuenta-s 2
que, eso esSIGINT
(la señal que generalmente se envía cuando presiona Ctrl + C, el valor predeterminadokill
esSIGTERM
)), entonces el comando no ignora la interrupción. Algo más lo está recogiendo. Cuando ejecuta esto localmente y funciona, ¿está diciendo que funciona usando el mismo terminal en la máquina del cliente para ejecutar algo localmente, o ejecuta un emulador de terminal localmente en la máquina del servidor? Me pregunto si estás usando algún emulador que está tratando de imitar Ctrl + C del mundo de Windows ...Respuestas:
ctrl+ cnunca mata un programa,
Eso no es lo que hace.
Hay un conjunto de señales que define el estándar POSIX, que se utilizan para controlar un programa en ejecución.
- http://man7.org/linux/man-pages/man7/signal.7.html
ctrl+ cenvía la señal
2
, "Interrupción desde el teclado" al programa que ha ejecutado desde un terminal.Es totalmente dependiente del programa manejar esa señal, puede hacer lo que quiera al respecto. Muchos intérpretes de lenguaje de script pueden manejar esto de manera predeterminada al eliminar el script llamado y salir con gracia.
Si desea que un programa salga, especialmente desde un contexto automático, se recomienda singal 15, el
kill
programa se puede usar para enviar señales a un proceso por id (pid).Hasta donde yo sé, el programa aún recibe esta señal y debería terminar lo antes posible tan limpiamente como sea posible.
Sin embargo, si el programa ignora la señal 15, y el programa persiste para vivir (y no está fallando en enviar la señal debido a un error de permiso)
La señal 9, hasta donde yo sé, es interpretada por el kernel (el administrador de tareas y la interfaz de hardware), el kernel detiene abruptamente el procesamiento del programa y desasigna / libera todos sus recursos.
fuente
Aquí hay un truco hardcore:
suspenderá su proceso y le devolverá la identificación de trabajo de ese proceso
Entonces:
(reemplace 1 con su ID de trabajo).
Nota: ¡El porcentaje es obligatorio !, de lo contrario, matará su proceso de inicio, lo que significa que matará el kernel y todo el sistema se bloqueará (así que no ponga el espacio en el medio :)
fuente
Ctrl + c no matará el proceso. solo detendrá el proceso de ejecución actual en el medio. Para matar el proceso necesitamos usar el comando "KILL"
fuente
kill
envía una señal a un proceso. No lo mata. La señal predeterminada enviada conkill
esTERM
, la señal enviada conctrl+c
esSIGINT
.Me encontré con esta antigua publicación del foro sobre este tema en particular. Parece que la secuencia de interrupción predeterminada podría anularse en un archivo de configuración separado en alguna parte.
Si solo está buscando matar este proceso externamente, puede usar kill solo tenga en cuenta que debe escalar kill como se describe en este artículo sobre los procesos de asesinato , en lugar de simplemente saltar al asesinato más extremo -9.
Wikipedia es un gran recurso para el programa kill . También aquí hay una lista de señales de Unix y lo que hacen.
fuente