Sé que hay ctrl+ c, pero a veces eso no funciona. En el escritorio de Ubuntu, puedo cerrar la ventana de terminal y abrir una nueva cuando esto sucede, pero ¿cómo se resolvería esto usando la CLI en el servidor de Ubuntu (sin reiniciar la caja)?
server
command-line
Loco
fuente
fuente
Respuestas:
CTRL+Cenviará
SIGINT
a la aplicación. La aplicación puede configurar un controlador para esta señal o puede ignorar la señal. Por defecto no hay controlador ySIGINT
matará la aplicación.Puedes usar CTRL+\cuál enviará
SIGQUIT
. Esto también generará un volcado del núcleo si el límite del núcleo no es cero.Puede suspender el proceso y volver al shell con CTRL+Z, esto detendrá la ejecución del proceso y volverá al indicador del shell. El proceso estará en la memoria y estará disponible como un trabajo en el shell actual. Luego puede usar
kill -SIGNAL %%
okill -SIGNAL %<job_ID>
para enviar una señal a ese trabajo. Por ejemplo, para matar el último uso del trabajokill -9 %%
Si ninguno de ellos funciona, siempre puede enviarlo
SIGTERM
, como último recurso,SIGKILL
lo que terminará cualquier proceso. Esta señal, como cualquier otra señal, debe enviarse como el mismo usuario que el proceso que está intentando detener o como root. Para enviarSIGKILL
al proceso, primero encuentre el proceso conps aux
ops -edf
, luegokill -SIGKILL <process_ID>
, ejecute , donde<process_ID>
está laPID
columna en laps
salida.Las señales no se pueden entregar si el proceso está en una llamada ininterrumpida. Las llamadas ininterrumpidas son funciones del kernel que no se pueden detener y generalmente ocurren debido a un controlador defectuoso (por ejemplo, un controlador que no es reentrante ). Un proceso que está en suspensión ininterrumpible no se puede detener hasta que se complete la llamada o se reinicie el servidor.
Si un proceso se convierte en zombie , no utilizará ningún recurso solo ocupando espacio en la tabla de procesos. Un proceso zombie no puede recibir señales.
La lista de señales para la arquitectura actual se puede encontrar con
kill -l
Vea las páginas de manual de
kill
,ps
ybash
. Para ver una página man use algo como:man ps
fuente
Si usted tiene acceso a la consola completa, puede hacerlo Alt- F1..12y obtener una nueva consola.
Desde allí, puede hacer una lista de procesos como la siguiente:
Luego haga un
kill
en la identificación del proceso:Si no tiene acceso completo a la consola, simplemente abra otra ventana de terminal (tal vez a través de PuTTY o similar), y siga los pasos de listado y cierre del proceso anterior.
fuente
Ctrl C envía un SIGINT a su proceso en ejecución. Si no desea abrir otra consola, puede enviar un SIGQUIT con Ctrl \. Esto abordará la mayoría de las aplicaciones colgadas día a día que SIGINT no.
Personalmente, quería una forma de enviar un SIGKILL con un acceso directo, pero no estoy al tanto de cómo hacerlo.
fuente
Considero
pgrep
, ypkill
para ser más fácil de usar quekill
con un ID de proceso explícito.Además, en lugar de comenzar con la señal 9 (SIGKILL), considere comenzar con el SIGTERM predeterminado (15). Esto le dará al proceso la oportunidad de terminar con gracia (si puede).
pkill -15 thing
ypkill thing
debe ser equivalente.Así es como funcionaría eso. Digamos que ntpd está colgado.
¿Cuáles son los procesos? (Puede saltar a pkill si cree que no tendrá falsos positivos).
Mata los procesos:
Úselo
pgrep
nuevamente para ver si fue exitoso.Si no, eventualmente muévase a
pkill -9
.fuente
Cambiaría a una nueva terminal, buscaría el PID del proceso atascado (usando
ps
) y luego lo usaríakill
para eliminar el proceso. Primero lo usaríakill (PID)
. Si eso no funciona, lo usaríakill -9 (PID)
. Si eso no detiene el proceso, la máquina debe reiniciarse.fuente
Cntrl+ \funcionó para mí (donde Cntrl+ co zno funcionó)
fuente