GNU/Linux >> Tutoriales Linux >  >> Linux

¿Qué pasa si 'matar -9' no funciona?

Tengo un proceso que no puedo eliminar con kill -9 <pid> . ¿Cuál es el problema en tal caso, especialmente porque soy el propietario de ese proceso? Pensé que nada podría evadir esa kill opción.

Respuesta aceptada:

kill -9 (SIGKILL) siempre funciona, siempre que tenga permiso para eliminar el proceso. Básicamente, usted debe iniciar el proceso y no ser setuid o setgid, o debe ser root. Hay una excepción:incluso root no puede enviar una señal fatal al PID 1 (el init proceso).

Sin embargo kill -9 no se garantiza que funcione inmediatamente . Todas las señales, incluida SIGKILL, se envían de forma asíncrona:el núcleo puede tardar en enviarlas. Por lo general, la entrega de una señal tarda como máximo unos pocos microsegundos, justo el tiempo que tarda el objetivo en obtener un intervalo de tiempo. Sin embargo, si el objetivo ha bloqueado la señal, la señal se pondrá en cola hasta que el objetivo la desbloquee.

Normalmente, los procesos no pueden bloquear SIGKILL. Pero el código del kernel puede, y los procesos ejecutan el código del kernel cuando llaman al sistema. El código del kernel bloquea todas las señales cuando la interrupción de la llamada del sistema daría como resultado una estructura de datos mal formada en algún lugar del kernel, o más generalmente, la violación de alguna invariante del kernel. Entonces, si (debido a un error o un diseño incorrecto) una llamada al sistema se bloquea indefinidamente, es posible que no haya forma de eliminar el proceso. (Pero el proceso será morirá si alguna vez completa la llamada al sistema).

Un proceso bloqueado en una llamada al sistema está en suspensión ininterrumpida. El ps o top el comando lo mostrará (en la mayoría de los dispositivos) en el estado D (originalmente para “d riesgo”, creo).

Un caso clásico de suspensión ininterrumpida prolongada son los procesos que acceden a archivos a través de NFS cuando el servidor no responde; las implementaciones modernas tienden a no imponer el sueño ininterrumpido (por ejemplo, bajo Linux, el intr La opción de montaje permite una señal para interrumpir los accesos a archivos NFS).

Si un proceso permanece en suspensión ininterrumpida durante mucho tiempo, puede obtener información sobre lo que está haciendo adjuntando un depurador, ejecutando una herramienta de diagnóstico como strace o dtrace (o herramientas similares, dependiendo de su tipo de Unix), o con otros mecanismos de diagnóstico como /proc/PID/syscall bajo Linux. Consulte No se puede eliminar el proceso wget con `kill -9` para obtener más información sobre cómo investigar un proceso en suspensión ininterrumpida.

Relacionado:¿Cómo funciona la licencia para el marco de código abierto LGPL?

A veces puede ver entradas marcadas Z (o H bajo Linux, no sé cuál es la distinción) en el ps o top producción. Estos no son técnicamente procesos, son procesos zombis, que no son más que una entrada en la tabla de procesos, que se mantiene para que el proceso padre pueda ser notificado de la muerte de su hijo. Desaparecerán cuando el proceso principal preste atención (o muera).


Linux
  1. ¿Qué es un Makefile y cómo funciona?

  2. ¿Por qué `exit &` no funciona?

  3. ¿Cómo funciona Rm? ¿Qué hace Rm?

  4. ¿Cuándo no debo matar -9 un proceso?

  5. ¿Qué hace kill -- -0?

¿Qué indica esta estadística de proceso?

¿Cómo funciona un balanceador de carga? ¿Qué es el equilibrio de carga?

¿Qué mató mi proceso y por qué?

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

¿Qué significa matar -3?

La repetición automática no funciona