206 votos

Qué hacer cuando " Ctrl + C no puede matar a un proceso?

Ctrl + C no siempre funciona para matar el proceso actual (por ejemplo, si el proceso está ocupado en ciertas operaciones de la red). En ese caso, usted acaba de ver "^C" por el cursor y no se puede hacer mucho más.

¿Cuál es la manera más fácil para obligar a que el proceso de morir ahora, sin perder mi terminal?

Resumen de las respuestas: Generalmente, usted puede Ctrl + Z para poner el proceso a dormir y, a continuación, hacer kill -9 _process-pid_, donde se encuentra el proceso del pid con ps y otras herramientas. En Bash (y posiblemente otros shells), usted puede hacer kill -9 %1 (o '%N' en general), que es más fácil. Si Ctrl + Z no funciona, vas a tener que abrir otra terminal y matan a partir de ahí.

140voto

Mike Cole Puntos 173

Para comprender el problema de por qué Ctrl + C no funciona, es muy útil para entender lo que sucede cuando se presiona:

La mayoría de las conchas se unen Ctrl + C para "enviar un SIGINT señal para el programa que actualmente se ejecuta en primer plano". Usted puede leer acerca de los diferentes tipos de señales a través de el hombre de la señal:

 SIGINT        2       Term    Interrupt from keyboard

Los programas pueden ignorar que la señal, como se puede ignorar SIGTSTP así:

 SIGTSTP   18,20,24    Stop    Stop typed at tty

(Que es lo que la mayoría de las conchas de hacer cuando usted presione Ctrl + Z, que es la razón por la que no está garantizado para trabajar.)

Hay algunas señales de que no puede ser ignorado por el proceso: SIGKILL, SIGSTOP y algunos otros. Usted puede enviar estas señales a través de la mata de comandos. Así que, para matar a tu colgante / zombieying proceso, acaba de encontrar el IDENTIFICADOR de proceso (PID). Por ejemplo, el uso de pgrep o ps y, a continuación, kill :

 % kill -9 PID

129voto

Teddy Puntos 2849

Si Ctrl+C (SIGINT) no funciona, pruebe con Ctrl+\ (SIGQUIT). A continuación, intente Ctrl+Z (SIGTSTP). Si que le devuelve a un intérprete de comandos, realice kill en el proceso de IDENTIFICACIÓN. (El valor por defecto de la señal SIGTERM, que se puede especificar con kill -TERM. En algunas de las conchas, usted puede ser capaz de utilizar %1 para referirse a la PID.) Si eso no funciona, ir a la otra terminal o sesión de SSH y hacer kill o kill -TERM en el proceso de IDENTIFICACIÓN. Sólo como último recurso se debe hacer kill -KILL,.k.una. kill -9, ya que no da el proceso de la posibilidad de abortar de manera limpia, la sincronización de sus archivos abiertos, eliminar sus archivos temporales, cerca de las conexiones de red, etc.

46voto

RoboAlex Puntos 191

Ver este enlace así.

Ctrl+Z: pausa de un proceso.

Ctrl+C: pida cortésmente el proceso para apagar ahora.

Ctrl+\: sin piedad matar el proceso que actualmente está en el primer plano

33voto

Daniel Beck Puntos 72548

Presione Ctrl-Z para suspender el programa y la colocamos en el fondo:

Suspend the program currently running and put it in the background.
This does not stop the process as it does in VMS!

(Restauración de primer plano de nuevo usando fg)

A continuación, puede kill o kill -9 , dado su IDENTIFICADOR de proceso (se puede conseguir que la de ps a).

13voto

Shivani Puntos 26

Generalmente, usted puede detener el proceso (Ctrl + Z) y, a continuación, utilizar kill -9. Para kill -9, usted necesita el PID del proceso en primer lugar. Para los trabajos en segundo plano, kill -9 %1 es la manera más fácil de hacerlo - si usted no está seguro de cuál es el número de trabajo de fondo que usted quiere matar, ejecutar jobs.

Alternativamente, usted puede encontrar el proceso de IDENTIFICACIÓN con

ps

A continuación, puede ejecutar

kill -9 <Appropriate PID from ps output>

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X