Equivalente a Ctrl C en el comando para cancelar un programa.
-
21-08-2019 - |
Pregunta
Estoy ejecutando un programa largo de Linux en una máquina remota y quiero detenerlo, pero mi problema es que si uso el comando matar, el programa se cerrará sin guardar los resultados.Normalmente lo que hago para terminar el programa es usar ctrl c y en ese caso el programa guarda los resultados, pero ahora mismo no estoy en la máquina que está ejecutando la sesión así que no puedo hacer ctrl c.
Mi pregunta es:¿Hay alguna manera de hacer de forma remota el equivalente a ctrl c?.
Solución
Probar:
kill -SIGINT processPIDHere
Básicamente Ctrl C envía la señal SIGINT
(interrupción), mientras que kill envía la señal SIGTERM
(terminación) de forma predeterminada a menos que especifique la señal a enviar.
Otros consejos
Ctrl + C simplemente envía una señal SIGINT, pero hay algunas otras señales de que es un poco más suave. http://www.gnu.org/software/libtool/ manual / libc / Terminación-Signals.html
Creo que se puede utilizar el comando de la matanza para enviar otra señal. (Ver matanza hombre para obtener más información)
Si controla el proceso remoto de larga duración, puede instalar un controlador de señal para SIGTERM (consulte man signal
y man sigaction
y las muchas preguntas SO sobre este tema), para limpiar bien antes de morir.
Eso es algo muy común de hacer.
Este es un ejemplo de mongod
Para iniciar el demonio de la línea de comandos:
mongod &
Luego, más tarde
kill -SIGINT `pgrep mongod`
Tenga en cuenta así en su manejador de la señal, que es como un manejador de interrupciones en que son muy limitado en cuanto a lo que se les permite hacer en ella sin corromper el resto de su programa . Lo mejor que puede hacer aquí se establece un "should_quit" variable de atomic_t.
Me estoy haciendo la siguiente manera
killall -2 <ProgramName>
o
kill -2 <PID of your process>
Yo solía olvidar el nombre de la señal. es decir SIGINT / SIGKILL aquí, así que estoy utilizando el número de ese killall como -2 o killall -9